Haskell 有没有办法消除此函数中类型的冗余?
假设我有两个这样的函数:Haskell 有没有办法消除此函数中类型的冗余?,haskell,Haskell,假设我有两个这样的函数: food :: Eatable a => String -> a food animalType = getAnimal animalType getAnimal :: Eatable a => String -> a getAnimal "cat" = Cat getAnimal "dog" = Dog 其中Cat和Dog都是Eatables 所以我可以这样称呼食物功能: let cat = food "cat" :: Cat 但是把绳子
food :: Eatable a => String -> a
food animalType = getAnimal animalType
getAnimal :: Eatable a => String -> a
getAnimal "cat" = Cat
getAnimal "dog" = Dog
其中Cat
和Dog
都是Eatable
s
所以我可以这样称呼食物功能:
let cat = food "cat" :: Cat
但是把绳子放在里面似乎是多余的。有没有办法将此更改为:
let cat = food :: Cat
是的,只需删除多余的参数。
getAnimal
的返回类型确定将使用的实例
data Cat = Cat
data Dog = Dog
class Eatable animal where
getAnimal :: animal
instance Eatable Dog where
getAnimal = Dog
instance Eatable Cat where
getAnimal = Cat
从
getAnimal
中删除String
是否有效?