在一个模块中,我想添加两个这样的类。
data Person = Person { name :: String -- and some other details
}
data PetAnimal = PetAnimal { name :: String
}
我认为这会起作用,但是ghc抱怨名字有多处崩溃。我该如何做到这一点?
答案 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