【发布时间】:2017-10-22 04:51:27
【问题描述】:
我有以下类型构造函数和数据构造函数:
data Compose f g x = MkCompose (f (g x))
在Compose的前奏中获取类型签名,它显示:
MkCompose :: f (g x) -> Compose f g x
为什么它显示为一个函数?
当我应用以下类型时:
*ComposeExercise> :t MkCompose [[42]]
MkCompose [[42]] :: Num x => Compose [] [] x
那么对我来说,这很清楚。
【问题讨论】:
-
因为这是最通用的签名。请注意
MkCompose是一个构造函数。在您的第二个示例中,参数已填写。 -
这里到底有什么问题?
MkCompose是一个构造函数,根据定义它是一个函数。究竟有什么不清楚的地方? -
啊哈。我太傻了。不清楚为什么它显示为函数
f (g x) -> Compose f g x。 -
您希望
MkCompose拥有什么类型?
标签: haskell