2013-10-11 23 views
2

我不知道什麼是錯我的代碼,但是當我嘗試運行它,我得到基本哈斯克爾:錯誤與簡單的函數

Couldn't match type `Integer' with `Int' 

我使用GHCI。我想創建一個基本程序,通過商店並給我所有的客戶名稱,然後我可以搜索找出他們租用的物品(一個庫)。有沒有更好的方法來獲取名稱?

這是我的代碼:

type Name = String 
type Customer = (Name,Int) 
type shop = [Customer] 
shop = [cust1, cust2] 

cust1 = ("Neil", 311) 
cust2 = ("Fred", 0) 

getName :: (String,Int) -> Name 
getName (a,b) = a 

回答

4

GHCI將默認使用Integer超過Int。你應該指定元組的類型爲cust1 = ("Neil", 311 :: Int)cust2 = ("Fred", 0) :: (String, Int)。更新後

編輯

如果你已經有Customer定義,你應該把它定義getName作爲

getName :: Customer -> Name 
getName = fst 

寫成

cust1 = ("Neil", 311) :: Customer 
cust2 = ("Fred", 0) :: Customer 

getName :: Customer -> Name 
getName (a, b) = a 

你也可以簡化事情有點使用ETA縮減和內置功能fst

+0

謝謝,你總是非常樂於助人! 我改變了函數+類型的聲明,所以我不必每次都這樣做,再加上它不是必須的,而是Int而不是Integer。 – John

+0

沒問題!只要記住接受,這樣別人就可以看到答案是否已經解決=) – bheklilr