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
是否有效?