I proposed (13 years ago...) a small patch to support optional fields in modules. This would help achieving the desired effect. See:
http://alain.frisch.fr/info/patch-option-announce
http://alain.frisch.fr/info/patch-option
-- Alain--
On 2/5/2014 7:49 PM, Yotam Barnoy wrote:
Hello List
I would like the following feature, and I'm not enough of an expert in
module-fu to know if something like this is doable.
Suppose I have a module signature of
module type Monad = sig
type 'a m
val return : 'a -> 'a m
val (>>=) : 'a m -> ('a -> 'b m) -> 'b m
val (>>) : 'a m -> 'b m -> 'b m
end
I would like to have a default implementation for (>>), since a simple
default implementation is
let (>>) m f = m >>= fun _ -> f
Alternatively, I would like to include this from some DefaultMonad
module, but have the (>>=) referred to in the function be my newly
defined (>>=) implementation (ie. late binding). Is there currently any
way to do this? If not, would there be a way to implement a partial
default implementation built into or associated with a module signature?
Something like
module type Monad = sig... default struct... end
Haskell has this available as part of the semantics of their typeclass
system, and I think it would be really handy to have (if there isn't
already a way to do it currently).
-Yotam
Caml-list mailing list. Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs