如何在haskell中声明包含相同变量的两个数据类型?

时间:2017-02-07 06:22:44

标签: haskell

在一个模块中,我想添加两个这样的类。

data Person = Person { name :: String -- and some other details
                     } 

data PetAnimal = PetAnimal { name :: String  
                           } 

我认为这会起作用,但是ghc抱怨名字有多处崩溃。我该如何做到这一点?

2 个答案:

答案 0 :(得分:6)

我认为,问题在于Haskell定义了记录中所有字段的访问函数,因此您可以获得一个函数

name :: Person -> String

然后一个

name :: PetAnimal -> String

这是编译器不喜欢的。

您可以更改其中一个或两个名称,或将它们放在不同的模块中。

答案 1 :(得分:1)

类型类是实现您可以考虑的通用接口的另一种方法。

data Person = Person { personname :: String -- and some other details
                     } 

data PetAnimal = PetAnimal { petanimalname :: String  
                           } 

class HasName a where
  name :: a -> String

instance HasName PetAnimal where
   name = petanimalname

instance HasName Person where
   name = personname