我目前正在玩模块,看看它们可以以类似的方式用于Haskell类型类.目前我正在尝试使用仿函数类型:
module type Functor =
sig
type 'a f
val fmap : ('a -> 'b) -> ('a f -> 'b f)
end
module IdFunc =
struct
type 'a f = Id of 'a
let fmap f = fun (Id a) -> Id (f a)
let runId (Id a) = a
end
let outmap (module F : Functor) av = F.fmap f av
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下outmap输入不正确,编译器会产生错误The type constructor F.f would escape its scope.我知道为什么在这种情况下会导致这个错误,但我不知道如何解决它(因为类型f是参数化的).
我已经尝试使用本地抽象类型:
let outmap (type s) (module …Run Code Online (Sandbox Code Playgroud)