Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file algebraic_intf.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(*
* Copyright (c) 2019-2020 Craig Ferguson <me@craigfe.io>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)openPpxlibmoduleTyp=structtypenonrecrecord_field_repr={field_name:string;field_repr:expression;}andvariant_case_repr={case_name:string;case_cons:(expression*int)option;}(** The algebraic datatypes supported by this module, parameterised by:
- ['a]: the subcomponent type of the algebraic type
- ['b]: a generic representation of the subcomponent type necessary to
derive the {i composite} type representation *)type(_,_)t=|Record:(label_declaration,record_field_repr)t|Variant:(constructor_declaration,variant_case_repr)t|Polyvariant:(row_field,variant_case_repr)tendmoduletypeS=sigmoduleM:Monad.Svalencode:('a,'b)Typ.t->subderive:('a->('b,'e)M.t)->lib:stringoption->type_name:string->'alist->(expression,'e)M.t(** Build the functional encoding of a composite type. Combine the various
elements necessary for a functional encoding of a composite type
[('a, 'b) {!typ}], in terms its components of type ['a list] and the name
of the composite type [type_name].
This requires a function [subderive] for deriving the type representation
of the subcomponents, which may run in a monadic context [M.t]. *)endmoduletypeAlgebraic=sigmoduleTyp=TypmoduletypeS=SmoduleLocated(S:Ast_builder.S)(M:Monad.S):SwithmoduleM=Mend