考虑以下两种类型:如何将haskell字段名称放在不同的名称空间中?
data Point=Point{x::Float,y::Float}
data Rectangle = {upperLeft::Point, bottomRight::Point}
data Square = {upperLeft::Point, bottomRight::Point}
的GHC编译器抱怨说,在与该广场的矩形冲突upperLeft字段名。这看起来很奇怪,因为在它的表面上,每个字段名称应该在类型的名称空间中,否则不能重复使用字段名称,并且我怀疑这会是一种常见的期望。
例如定义我们写了一个变量:
let a=Rectangle{upperLeft=Point 2 3, bottomRight=Point 7 7}
let a=Square{upperLeft=Point 2 3, bottomRight=Point 7 7}
从这里我们可以看到,我们应该能够期待每个字段的名称应该是各自类型的命名空间内。
我的用法是否正确或我的期望是否错误?有没有办法解决这个问题?
将每种类型放置在其自己的模块中似乎是一个矫枉过正的问题。我意识到accessor函数已经创建,但我希望类型推断能够选择正确的字段名称来使用。 –
是的,我同意在这种情况下分离模块感觉像是矫枉过正。我可能只是改变字段名称。像'rectUpperLeft'这样的东西不比'upperLeft'长。 我同意重复使用字段名称似乎是一个有用的和合理的事情期望,但据我所知,你不能用Haskell的记录做到这一点。 – astrieanna