Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我的记录字段名称与同一范围内的其他记录字段冲突_Haskell - Fatal编程技术网

Haskell 我的记录字段名称与同一范围内的其他记录字段冲突

Haskell 我的记录字段名称与同一范围内的其他记录字段冲突,haskell,Haskell,我已创建以下数据类型: data IntroduceIdea = IntroduceIdea { id :: UUID , userId ::UUID , createdOn :: UTCTime, ideaContent :: String } deriving (Eq,Show) 我与前奏曲(id字段)有冲突。。。所以我添加了扩展名{-#LANGUAGE duplicate recordfields},但是我觉得在我使用它的

我已创建以下数据类型:

data IntroduceIdea = IntroduceIdea { id :: UUID , userId ::UUID , createdOn :: UTCTime,
                                 ideaContent :: String } deriving (Eq,Show)

我与前奏曲(id字段)有冲突。。。所以我添加了扩展名
{-#LANGUAGE duplicate recordfields}
,但是我觉得在我使用它的地方粘贴它是不对的……你有更好的解决方案吗

Willem Van Onsem建议将其命名为introceidead,在我看来,这是最惯用的解决方案。这让我花了一些时间来适应,从C#和F#开始,对象和记录通常由类字段或记录属性组成

在这种语言中,如果没有附加到这些字段或属性的记录,就无法真正引用这些字段或属性,因此在字段名称中“重复”“对象”的名称似乎是多余的

在Haskell中,数据记录由一组函数组成。具体而言,该标签将是此函数:

> :t introduceIdeaId
introduceIdeaId :: IntroduceIdea -> UUID
它是一个函数,以
introceidea
值作为输入,并返回
UUID
作为输出

数据标签是“真实”函数在编写函数时非常有用。例如,如果您有一个
introceidea
值(
x
y
)的(小)列表,您可以提取
introceidead
标签,并以无点样式将其转换为
String
值:

> fmap (show . introduceIdeaId) [x, y]
["c44a4cb1-f494-46b5-9459-9a022d364bfa","f3de5def-0bad-46a7-b3a2-604c7ecd54e6"]

这里,
introceideaid
用作它的函数。名称必须明确无误。如果我们使用了名称
id
,如果我们的意思是
introceidea->UUID
a->a

为什么不将其重命名为
introceidea
?它会毫无意义地增加很多冗长的内容,你不觉得吗?introceidea introceidea而不是id introceidea那么我不明白它在应用于特定类型时为什么会发生冲突。因为您将引入两个(或更多)的
id
函数,以使用前奏曲的
id
函数。一个有
a->a
签名,另一个有
introductionidea->UUID
我能用图书馆的镜头得到更灵活的东西吗?我现在正在读关于它的书…@尼古拉辛,我不这么认为;镜头不是我的强项,所以我可能错了,但我认为镜头也需要有唯一的名称。
Haskell最惊人的缺点之一是不能在不同的记录类型中使用相同的字段名称。我将解释我们计划如何解决这个问题(与Adam Gundry合作),以及结果如何与镜头世界完美契合。
关于如何解决这个问题,我没有具体的例子,但我仍在研究:-)@NicolasHenin lens不允许您创建同名的记录字段,但它允许您创建具有相同名称的镜头,可以引用不同类型记录中的类似字段。