package streamable

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file core_primitive_clause.ml

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
41
42
43
44
45
46
47
48
open! Base
open! Import

let known_zero_arity_core_primitives =
  Set.of_list
    (module String)
    [ "bool"
    ; "bytes"
    ; "char"
    ; "float"
    ; "int"
    ; "int32"
    ; "int64"
    ; "nativeint"
    ; "string"
    ; "unit"
    ]
;;

let primitive ~core_type =
  match core_type.ptyp_desc with
  | Ptyp_constr (longident_loc, []) ->
    (match longident_loc.txt with
     | Lident lident when Set.mem known_zero_arity_core_primitives lident -> Some lident
     | Lident _ | Ldot (_, _) | Lapply (_, _) -> None)
  | _ -> None
;;

let maybe_match type_ (_ : Ctx.t) =
  let%bind core_type = Type_.match_core_type type_ in
  let%map primitive = primitive ~core_type in
  ({ children = []
   ; apply_functor =
       (fun ctx children ->
         assert (List.is_empty children);
         Helpers.apply_streamable_dot
           ctx
           ~functor_name:"Of_atomic"
           ~arguments:
             [ pmod_ident
                 ~loc:ctx.loc
                 (Loc.make
                    ~loc:ctx.loc
                    (Longident.parse [%string "Core.%{String.capitalize primitive}"]))
             ])
   }
    : Clause.Match.t)
;;
OCaml

Innovation. Community. Security.