假设我有以下值构造函数: 现在我可以运行: 现在我可以写一个类型声明 但是我不能输入类型声明 这是因为 “ Circle不是类型, Shape是” 我的问题是: 为什么在值构造函数中声明的类型不是Haskell中的类型? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在学习Haskell,并对此示例感到困惑。
考虑以下:
class Tofu t where
tofu :: j a -> t a j
data Frank a b = Frank {frankField :: b a} deriving (Show)
instance Tofu Frank where
tofu x = Frank x
为什么在将Frank
作为Tofu
的实例时,我们提供(据我所知),类型构造函数Frank x
,而不是值构造函数,即tofu x = Frank {frankField = x}
?
你还在使用值构造函数。 您可以使用具有记录字段的类型而无需使用记录语法来构造它们,因此Frank x
与Frank { frankField = x }
。
如果您有多个记录字段,例如:
data Frank a b = Frank { frankA :: a, frankB :: b }
...然后字段按照您写入的顺序显示,因此您可以执行以下操作:
-- With x :: a, y :: b
Frank x y
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.