众所周知,OCaml具有参数多态性,这会导致一些限制。 Haskell通过它的类型类提供了一个特别的多态性,这在很多情况下显然非常方便。众所周知,OCaml的模块和函子的系统允许创建一种特设的多态性。例如,请参阅Simon Shine here的最新答案。OCaml函子,Haskell类型类和多重派生
我的观点是,有可能在Haskell中创建类型派生几种类型。例如:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show, Read)
这是很方便的,以限定具有几个特点(允许Person
类型的值来支持相等测试,是可打印的,并且是在给定示例可读的)的类型。
我的问题是以下几点:我们可以在OCaml中做同样的事吗?通过只需我的意思是语言的基础语法,没有许多手段。
举一个稍微具体的例子,假设我们有两个OCaml的签名
module type Showable = sig
type t
val to_string : t -> string
end
module type Readable = sig
type t
val from_string : string -> t
end
目的是通过写一个实现既Showable
和Readable
模块参数化仿函数F
。
这必须是我见过的最好的书面问题之一!希望有人能找到答案! – Lhooq