ocaml-modular-implicits
ocaml-modular-implicits copied to clipboard
OCaml extended with modular implicits
``` module type MONAD = sig type 'a t val return : 'a -> 'a t val bind : ('a -> 'b t) -> 'a t -> 'b t end...
It'd be convenient to have implicits as constructor arguments so that we could write ``` ocaml type showable = Show : {S: SHOW} * S.t -> showable;; let f (Show...
It'd be useful to allow rebinding/shadowing of implicit modules in the top level: ``` # implicit module M = struct end;; implicit module M : sig end # implicit module...
This patch is an extension of #28. It essentially adds a separate notion of _implicit scope_ for looking up implicit modules and functors, rather than piggybacking on the ordinary scope....
A bug report from @jordwalke: ``` ocaml module type OneSig = sig type t val oneValue: t -> string end module type TwoSig = sig type t val twoValue: t...
A bug report from @jordwalke: ``` ocaml module type OneSig = sig type t val oneValue: t -> string end module type TwoSig = sig type t val twoValue: t...
The following program is rejected with `Fatal error: exception Ctype.Unify(_)`: ``` ocaml module type T = sig type t val x : t end let get {I:T} () = I.x...
The following code doesn't compile ``` ocaml module type Foo = sig type 'a t val f : 'a t -> int end implicit module Foo1 = struct type 'a...
I expect this can be simplified further: ``` ocaml module type S = sig type _ t end implicit module Id = struct type 'a t = 'a end module...
Currently we keep the level of an in-scope implicit parameter in the environment, similar to how locally abstract types are handled. Really we only need to keep the fact that...