我正在学习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}

#1楼 票数:7 已采纳

你还在使用值构造函数。 您可以使用具有记录字段的类型而无需使用记录语法来构造它们,因此Frank xFrank { frankField = x }

如果您有多个记录字段,例如:

data Frank a b = Frank { frankA :: a, frankB :: b } 

...然后字段按照您写入的顺序显示,因此您可以执行以下操作:

-- With x :: a, y :: b
Frank x y

  ask by d125q translate from so

未解决问题?本站智能推荐:

1回复

Haskell中整数的类型构造函数

我才刚刚开始学习Haskell,并且陷入了以下问题: 我想创建一种日历周类型,即从1到52的数字。这就是为什么我尝试以下一种方法: 因此,可以在这里使用它: 但是,GHC只是打印出以下错误: 我究竟做错了什么? 还有另一种方法来构建这种类型吗? 非常感谢你的
2回复

在 Haskell 中对数据类型和值构造函数使用相同的名称是否常见?

查看以下代码: 它来自于 Learn you a Haskell for Great Good 这本书,该代码示例随附以下文本: 请注意,在定义点时,我们对数据类型和值构造函数使用了相同的名称。 这没有特殊含义,尽管如果只有一个值构造函数,通常使用与类型相同的名称。 现在我的假设是da
1回复

Haskell 作业中类型构造函数的问题

我创建了一个数据类型,需要使用 instance 使其成为相等类型类的实例。 我的数据类型由值 R a b 组成。 如果x等于c并且y等于d我想让R xy等于R cd 。 这是我到目前为止编写的代码。 它不编译。 我认为这可能是错误的,因为类型 a 和 b 不一定必须在 Equality 类型
1回复

构造函数的类型类的重叠实例

我想创建一个类型类GetGLInfo ,其中包含多个OpenGL函数所需的一些基本类型信息: 一个简单的例子是Float : 我想使用构造函数data a :. b为Data.Vec矢量数据类型创建此类的实例data a :. b data a :. b : 我本来会用
1回复

类型构造函数的类型定义的Haskell实例

给出错误: No instance for (Eq m) arising from a use of '=='所以: 工作正常(至少我开始理解错误),但为什么我需要这个约束? 我正在努力学习,所以'为什么'对我来说非常重要。
1回复

如何使functor的函数类型构造函数实例? 重复的实例

我正在尝试在类型类别中进行练习,但是我没有足够的知识来创建一个像函数一样的数据类型。 第一个练习说:“为e和(( - >)e)实现Functor实例。” 我想我理解类型构造函数,但我不明白这个具体情况。 我不知道在哪里可以找到信息,我在谷歌搜索但失败了。 这是我的尝
1回复

智能构造函数类型可以有多个有效的 Functor 实例吗?

关于Functor的这两条规则是众所周知的: 如果类型参数逆变出现,则不能创建Functor 任何类型最多有一个有效的Functor实例 但是如果你稍微作弊,你就可以打破第一条规则。 以休斯列表为例: 只要您假设所有HList都将通过智能构造函数生成,即使a出现逆变,该Functor
2回复

存在类型类与数据构造函数与副产品

我发现自己在我的设计中遇到了相同的模式,我开始使用带有一些数据构造函数的类型,最终希望能够对这些数据构造函数进行类型化,从而将它们拆分为自己的类型,然后必须增加程序的其他部分的详细程度需要使用Either或另一个tagged-union,以便我仍然需要表示这些类型的多个(即集合)。 我希望