Skip to content

Instantly share code, notes, and snippets.

@EduardoRFS
Last active August 17, 2020 05:20
Show Gist options
  • Save EduardoRFS/b074537cd7ad33ccd303631b9d1c2838 to your computer and use it in GitHub Desktop.
Save EduardoRFS/b074537cd7ad33ccd303631b9d1c2838 to your computer and use it in GitHub Desktop.

Variants

type user_status =
  | Authorized
  | Unauthorized;
let someone_status = Authorized
{
  "module_ident": "Tuturu!\n",
  "main_module_block_size": 1,
  "required_globals": "{ }\n",
  "code": [
    "Lprim",
    ["Psetglobal", "Tuturu!\n"],
    [
      [
        "Llet",
        ["Strict"],
        ["Pgenval"],
        "someone_status/83\n",
        ["Lconst", ["Const_pointer", 0]],
        [
          "Lprim",
          ["Pmakeblock", 0, ["Immutable"], null],
          [["Lvar", "someone_status/83\n"]],
          "File \"_none_\", line 1\n"
        ]
      ]
    ],
    "File \"_none_\", line 1\n"
  ]
}

Polyvar

type user_status = [ | `Authorized | `Unauthorized];
let someone_status: user_status = `Authorized
{
  "module_ident": "Tuturu!\n",
  "main_module_block_size": 1,
  "required_globals": "{ }\n",
  "code": [
    "Lprim",
    ["Psetglobal", "Tuturu!\n"],
    [
      [
        "Llet",
        ["Strict"],
        ["Pgenval"],
        "someone_status/81\n",
        ["Lconst", ["Const_pointer", -706682181]],
        [
          "Lprim",
          ["Pmakeblock", 0, ["Immutable"], null],
          [["Lvar", "someone_status/81\n"]],
          "File \"_none_\", line 1\n"
        ]
      ]
    ],
    "File \"_none_\", line 1\n"
  ]
}

Records

type user = {
  mutable name: string,
  id: int,
};
let eduardo = {name: "Eduardo", id: 0};
let name = eduardo.name
{
  "module_ident": "Tuturu!\n",
  "main_module_block_size": 2,
  "required_globals": "{ }\n",
  "code": [
    "Lprim",
    ["Psetglobal", "Tuturu!\n"],
    [
      [
        "Llet",
        ["Strict"],
        ["Pgenval"],
        "eduardo/83\n",
        [
          "Lprim",
          ["Pmakeblock", 0, ["Mutable"], [["Pgenval"], ["Pintval"]]],
          [
            ["Lconst", ["Const_base", ["Const_string", "Eduardo", null]]],
            ["Lconst", ["Const_base", ["Const_int", 0]]]
          ],
          "File \"_none_\", line 1\n"
        ],
        [
          "Llet",
          ["Strict"],
          ["Pgenval"],
          "name/84\n",
          [
            "Lprim",
            ["Pfield", 0],
            [["Lvar", "eduardo/83\n"]],
            "File \"_none_\", line 1\n"
          ],
          [
            "Lprim",
            ["Pmakeblock", 0, ["Immutable"], null],
            [
              ["Lvar", "eduardo/83\n"],
              ["Lvar", "name/84\n"]
            ],
            "File \"_none_\", line 1\n"
          ]
        ]
      ]
    ],
    "File \"_none_\", line 1\n"
  ]
}

Objects

type user = {
  .
  name: string,
  id: int,
};
let eduardo = {as _; pub name = "Eduardo"; pub id = 0};
let eduardo_name = eduardo#name
[
  "Lprim",
  ["Psetglobal", "Tuturu!\n"],
  [
    [
      "Llet",
      ["Alias"],
      ["Pgenval"],
      "shared/124\n",
      [
        "Lconst",
        [
          "Const_block",
          0,
          [
            ["Const_immstring", "name"],
            ["Const_immstring", "id"]
          ]
        ]
      ],
      [
        "Llet",
        ["Strict"],
        ["Pgenval"],
        "eduardo/81\n",
        [
          "Llet",
          ["StrictOpt"],
          ["Pgenval"],
          "class_tables/101\n",
          [
            "Lprim",
            ["Pmakeblock", 0, ["Mutable"], null],
            [
              ["Lconst", ["Const_pointer", 0]],
              ["Lconst", ["Const_pointer", 0]],
              ["Lconst", ["Const_pointer", 0]]
            ],
            "File \"_none_\", line 1\n"
          ],
          [
            "Llet",
            ["Strict"],
            ["Pgenval"],
            "class/105\n",
            [
              "Lapply",
              {
                "ap_func": [
                  "Lprim",
                  ["Pfield", 15],
                  [
                    [
                      "Lprim",
                      ["Pgetglobal", "CamlinternalOO!\n"],
                      [],
                      "File \"_none_\", line 1\n"
                    ]
                  ],
                  "File \"_none_\", line 1\n"
                ],
                "ap_args": [["Lvar", "shared/124\n"]],
                "ap_loc": "File \"_none_\", line 1\n",
                "ap_should_be_tailcall": false,
                "ap_inlined": ["Default_inline"],
                "ap_specialised": ["Default_specialise"]
              }
            ],
            [
              "Llet",
              ["Strict"],
              ["Pgenval"],
              "obj_init/128\n",
              [
                "Llet",
                ["Strict"],
                ["Pgenval"],
                "ids/123\n",
                [
                  "Lapply",
                  {
                    "ap_func": [
                      "Lprim",
                      ["Pfield", 7],
                      [
                        [
                          "Lprim",
                          ["Pgetglobal", "CamlinternalOO!\n"],
                          [],
                          "File \"_none_\", line 1\n"
                        ]
                      ],
                      "File \"_none_\", line 1\n"
                    ],
                    "ap_args": [
                      ["Lvar", "class/105\n"],
                      ["Lvar", "shared/124\n"]
                    ],
                    "ap_loc": "File \"_none_\", line 1\n",
                    "ap_should_be_tailcall": false,
                    "ap_inlined": ["Default_inline"],
                    "ap_specialised": ["Default_specialise"]
                  }
                ],
                [
                  "Llet",
                  ["StrictOpt"],
                  ["Pgenval"],
                  "name/88\n",
                  [
                    "Lprim",
                    ["Pfield", 0],
                    [["Lvar", "ids/123\n"]],
                    "File \"_none_\", line 1\n"
                  ],
                  [
                    "Llet",
                    ["StrictOpt"],
                    ["Pgenval"],
                    "id/89\n",
                    [
                      "Lprim",
                      ["Pfield", 1],
                      [["Lvar", "ids/123\n"]],
                      "File \"_none_\", line 1\n"
                    ],
                    [
                      "Lsequence",
                      [
                        "Lapply",
                        {
                          "ap_func": [
                            "Lprim",
                            ["Pfield", 10],
                            [
                              [
                                "Lprim",
                                ["Pgetglobal", "CamlinternalOO!\n"],
                                [],
                                "File \"_none_\", line 1\n"
                              ]
                            ],
                            "File \"_none_\", line 1\n"
                          ],
                          "ap_args": [
                            ["Lvar", "class/105\n"],
                            [
                              "Lprim",
                              ["Pmakeblock", 0, ["Immutable"], null],
                              [
                                ["Lvar", "name/88\n"],
                                ["Lconst", ["Const_pointer", 0]],
                                [
                                  "Lconst",
                                  [
                                    "Const_base",
                                    ["Const_string", "Eduardo", null]
                                  ]
                                ],
                                ["Lvar", "id/89\n"],
                                ["Lconst", ["Const_pointer", 0]],
                                ["Lconst", ["Const_base", ["Const_int", 0]]]
                              ],
                              "File \"_none_\", line 1\n"
                            ]
                          ],
                          "ap_loc": "File \"_none_\", line 1\n",
                          "ap_should_be_tailcall": false,
                          "ap_inlined": ["Default_inline"],
                          "ap_specialised": ["Default_specialise"]
                        }
                      ],
                      [
                        "Lfunction",
                        {
                          "kind": ["Curried"],
                          "params": [["env/107\n", ["Pgenval"]]],
                          "return": ["Pgenval"],
                          "body": [
                            "Lapply",
                            {
                              "ap_func": [
                                "Lprim",
                                ["Pfield", 23],
                                [
                                  [
                                    "Lprim",
                                    ["Pgetglobal", "CamlinternalOO!\n"],
                                    [],
                                    "File \"_none_\", line 1\n"
                                  ]
                                ],
                                "File \"_none_\", line 1\n"
                              ],
                              "ap_args": [
                                ["Lconst", ["Const_pointer", 0]],
                                ["Lvar", "class/105\n"]
                              ],
                              "ap_loc": "File \"_none_\", line 1\n",
                              "ap_should_be_tailcall": false,
                              "ap_inlined": ["Default_inline"],
                              "ap_specialised": ["Default_specialise"]
                            }
                          ],
                          "attr": {
                            "inline": ["Default_inline"],
                            "specialise": ["Default_specialise"],
                            "local": ["Default_local"],
                            "is_a_functor": false,
                            "stub": false
                          },
                          "loc": "File \"_none_\", line 1\n"
                        }
                      ]
                    ]
                  ]
                ]
              ],
              [
                "Lsequence",
                [
                  "Lapply",
                  {
                    "ap_func": [
                      "Lprim",
                      ["Pfield", 16],
                      [
                        [
                          "Lprim",
                          ["Pgetglobal", "CamlinternalOO!\n"],
                          [],
                          "File \"_none_\", line 1\n"
                        ]
                      ],
                      "File \"_none_\", line 1\n"
                    ],
                    "ap_args": [["Lvar", "class/105\n"]],
                    "ap_loc": "File \"_none_\", line 1\n",
                    "ap_should_be_tailcall": false,
                    "ap_inlined": ["Default_inline"],
                    "ap_specialised": ["Default_specialise"]
                  }
                ],
                [
                  "Lapply",
                  {
                    "ap_func": ["Lvar", "obj_init/128\n"],
                    "ap_args": [["Lconst", ["Const_pointer", 0]]],
                    "ap_loc": "File \"_none_\", line 1\n",
                    "ap_should_be_tailcall": false,
                    "ap_inlined": ["Default_inline"],
                    "ap_specialised": ["Default_specialise"]
                  }
                ]
              ]
            ]
          ]
        ],
        [
          "Llet",
          ["Strict"],
          ["Pgenval"],
          "eduardo_name/94\n",
          [
            "Lsend",
            ["Public"],
            ["Lconst", ["Const_base", ["Const_int", -922783157]]],
            ["Lvar", "eduardo/81\n"],
            [],
            "File \"_none_\", line 1\n"
          ],
          [
            "Lprim",
            ["Pmakeblock", 0, ["Immutable"], null],
            [
              ["Lvar", "eduardo/81\n"],
              ["Lvar", "eduardo_name/94\n"]
            ],
            "File \"_none_\", line 1\n"
          ]
        ]
      ]
    ]
  ],
  "File \"_none_\", line 1\n"
]

Boolean

let is_true = true;
let is_false = false
{
  "module_ident": "Tuturu!\n",
  "main_module_block_size": 2,
  "required_globals": "{ }\n",
  "code": [
    "Lprim",
    ["Psetglobal", "Tuturu!\n"],
    [
      [
        "Llet",
        ["Strict"],
        ["Pgenval"],
        "is_true/80\n",
        ["Lconst", ["Const_pointer", 1]],
        [
          "Llet",
          ["Strict"],
          ["Pgenval"],
          "is_false/81\n",
          ["Lconst", ["Const_pointer", 0]],
          [
            "Lprim",
            ["Pmakeblock", 0, ["Immutable"], null],
            [
              ["Lvar", "is_true/80\n"],
              ["Lvar", "is_false/81\n"]
            ],
            "File \"_none_\", line 1\n"
          ]
        ]
      ]
    ],
    "File \"_none_\", line 1\n"
  ]
}

Global Module Access

let print_endline = Stdlib.print_endline
[
  "Lprim",
  ["Psetglobal", "Tuturu!\n"],
  [
    [
      "Llet",
      ["Strict"],
      ["Pgenval"],
      "print_endline/82\n",
      [
        "Lprim",
        ["Pfield", 45],
        [
          [
            "Lprim",
            ["Pgetglobal", "Stdlib!\n"],
            [],
            "File \"_none_\", line 1\n"
          ]
        ],
        "File \"_none_\", line 1\n"
      ],
      [
        "Lprim",
        ["Pmakeblock", 0, ["Immutable"], null],
        [["Lvar", "print_endline/82\n"]],
        "File \"_none_\", line 1\n"
      ]
    ]
  ],
  "File \"_none_\", line 1\n"
]

Sub Module

module Sub = {
  let value = 123;
}
[
  "Lprim",
  ["Psetglobal", "Tuturu!\n"],
  [
    [
      "Llet",
      ["Strict"],
      ["Pgenval"],
      "Sub/85\n",
      [
        "Levent",
        [
          "Llet",
          ["Strict"],
          ["Pintval"],
          "value/84\n",
          ["Lconst", ["Const_base", ["Const_int", 123]]],
          [
            "Lprim",
            ["Pmakeblock", 0, ["Immutable"], null],
            [["Lvar", "value/84\n"]],
            "File \"_none_\", line 1\n"
          ]
        ],
        {
          "lev_loc": "File \"_none_\", line 1\n",
          "lev_kind": ["Lev_module_definition", "Sub/85\n"],
          "lev_repr": null,
          "lev_env": "env\n"
        }
      ],
      [
        "Lprim",
        ["Pmakeblock", 0, ["Immutable"], null],
        [["Lvar", "Sub/85\n"]],
        "File \"_none_\", line 1\n"
      ]
    ]
  ],
  "File \"_none_\", line 1\n"
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment