package ppx_diff

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

Source file type_param.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
open! Base
open Ppxlib

type t =
  { var : Var.t
  ; variance : variance
  ; injectivity : injectivity
  }

let map_var t ~f = { t with var = f t.var }
let var t = t.var

let of_type_declaration td ~builder =
  let open (val builder : Builder.S) in
  List.map td.ptype_params ~f:(function
    | { ptyp_desc = Ptyp_var var; _ }, (variance, injectivity) ->
      { var = Var.of_string var; variance; injectivity }
    | _ -> raise_error "Unexpected type param, expected vars only")
;;

let to_type_declaration_param t ~builder =
  let { var; variance; injectivity } = t in
  Var.core_type var ~builder, (variance, injectivity)
;;