2013-06-06 23 views
2

假設我有兩個功能,像這樣:有什麼辦法可以刪除這個函數中的類型冗餘?

food :: Eatable a => String -> a 
food animalType = getAnimal animalType 

getAnimal :: Eatable a => String -> a 
getAnimal "cat" = Cat 
getAnimal "dog" = Dog 

CatDog都是Eatable秒。

所以我可以調用函數的食物像這樣:

let cat = food "cat" :: Cat 

但具有串在那裏似乎是多餘的。有沒有什麼辦法可以改變它:

let cat = food :: Cat 
+0

是不是隻是從'getAnimal'中刪除'String'的作品? – Satvik

回答

5

是的,只需刪除多餘的參數。返回類型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 
相關問題