相关疑难解决方法(0)

具有参数类型的第一类模块(类型构造函数Ff将逃避其范围)

我目前正在玩模块,看看它们可以以类似的方式用于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)

ocaml types module locally-abstract-type

5
推荐指数
1
解决办法
428
查看次数

标签 统计

locally-abstract-type ×1

module ×1

ocaml ×1

types ×1