gpt4 book ai didi

haskell - Haskell 记录中的名称冲突

转载 作者:行者123 更新时间:2023-12-03 10:12:37 25 4
gpt4 key购买 nike

Haskell 没有记录成员的点符号。对于每个记录成员,编译器创建一个具有相同名称且类型为 RecType -> FieldType 的函数。这会导致名称冲突。有什么办法可以解决这个问题,即我怎样才能有多个具有相同字段名称的记录?

最佳答案

对于大型项目,我更喜欢将每种类型保留在自己的模块中,并使用 Haskell 的模块系统来命名每种类型的访问器。

例如,我可能有一些类型 A在模块 A :

-- A.hs

data A = A
{ field1 :: String
, field2 :: Double
}

...和另一种类型 B在模块 B 中具有类似名称的字段:
-- B.hs

data B = B
{ field1 :: Char
, field2 :: Int
}

然后,如果我想在其他模块中使用这两种类型 C我可以导入它们,以区分我的意思是哪个访问器:
-- C.hs
import A as A
import B as B

f :: A -> B -> (Double, Int)
f a b = (A.field2 a, B.field2 b)

不幸的是,Haskell 没有办法在同一个模块中定义多个命名空间,否则就不需要将每个类型拆分到一个单独的模块中来执行此操作。

关于haskell - Haskell 记录中的名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com