Le type d'une fonction dans l'AST d'ocaml

type function ocaml

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

j’essaye de récuperer le type des parametres d’une fonction, donc j’imagine que le moyen le plus simple c’est d’avoir le type de la fonction, mais je ne trouve pas ou est représenté le type d’une fonction dans l’AST d’ocaml.

J’ai créer un petit exemple du style

1
let func arg1 arg2 = arg1 + arg2

Et l’AST typé que ce code me génère

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
structure_item (args_same_types.ml[1,0+0]..args_same_types.ml[1,0+32])
    Tstr_value Nonrec
    [
      <def>
        pattern (args_same_types.ml[1,0+4]..args_same_types.ml[1,0+8])
          Tpat_var "func/1002"
        expression (args_same_types.ml[1,0+9]..args_same_types.ml[1,0+32]) ghost
          Texp_function
          Nolabel
          [
            <case>
              pattern (args_same_types.ml[1,0+9]..args_same_types.ml[1,0+13])
                Tpat_var "arg1/1003"
              expression (args_same_types.ml[1,0+14]..args_same_types.ml[1,0+32]) ghost
                Texp_function
                Nolabel
                [
                  <case>
                    pattern (args_same_types.ml[1,0+14]..args_same_types.ml[1,0+18])
                      Tpat_var "arg2/1004"
                    expression (args_same_types.ml[1,0+21]..args_same_types.ml[1,0+32])
                      Texp_apply
                      expression (args_same_types.ml[1,0+26]..args_same_types.ml[1,0+27])
                        Texp_ident "Pervasives!.+"
                      [
                        <arg>
                          Nolabel
                          expression (args_same_types.ml[1,0+21]..args_same_types.ml[1,0+25])
                            Texp_ident "arg1/1003"
                        <arg>
                          Nolabel
                          expression (args_same_types.ml[1,0+28]..args_same_types.ml[1,0+32])
                            Texp_ident "arg2/1004"
                      ]
                ]
          ]
    ]
]

`

Je voit nul part le type inféré des arguments, du coup je sais pas ou chercher.

Si quelqu’un peut m’aider. Merci.

Édité par YoRHa

"Ce qui me fait peur ? C’est le manque de modération que peuvent avoir les hommes."

+0 -0

Et si ce n’etait pas dans L’AST que le type etait inféré mais par l’interpreteur/compilateur à son moment ? ( enfin bon je connais pas vraiment oCaml .. (je dis peut-etre vraiment n’importe quoi aussi. ))

+0 -1
Auteur du sujet

Et si ce n’etait pas dans L’AST que le type etait inféré mais par l’interpreteur/compilateur à son moment ? ( enfin bon je connais pas vraiment oCaml .. (je dis peut-etre vraiment n’importe quoi aussi. ))

Zérotisme

Bah ocaml est un langage typé statique donc il a un AST typé (ce que j’ai montré dans mon message de base) toute l’utilité c’est justement (je pense) d’avoir acces aux types. Sinon l’ast de base suffit

Mais je pense avoir trouver.

Dans le record Texp_function y’a un champ "cases" qui est une liste de case, un case c’est un record de pattern expression option et expression, et chaque case représente un argument, et dans chacun de ces champs on peut donc trouver des patter_type ou expr_type.

je vais essayer

"Ce qui me fait peur ? C’est le manque de modération que peuvent avoir les hommes."

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte