类型类中的类型与值构造函数
Type vs. value constructors in typeclasses
我正在学习 Haskell 并且对 this example 感到困惑。
考虑以下几点:
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
我正在学习 Haskell 并且对 this example 感到困惑。
考虑以下几点:
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