2013-03-30 25 views
1

更改功能類型我有一個具有這種類型的默認功能:在Haskell

func :: Integer -> (Integer,Integer) -> [[String]] -> ([Char],[Char],[Char],[Char]) -> (Integer,Integer) 

但我想它返回(INT,INT) 當我寫這篇:

func:: Integer -> (Integer,Integer) -> [[String]] -> ([Char],[Char],[Char],[Char]) -> (Int,Int) 

我得到這個錯誤: 主>:l播放

ERROR "play.hs":64 - Type error in explicitly typed binding 
*** Term   : func 
*** Type   : Integer -> (Integer,Integer) -> [[String]] -> ([Char],[Char],[Char],[Char]) -> (Integer,Integer) 
*** Does not match : Integer -> (Integer,Integer) -> [[String]] -> ([Char],[Char],[Char],[Char]) -> (Int,Int) 

我怎樣才能解決這個問題?謝謝。

+0

「Int」不是「整數」。 Haskell在數字類型之間沒有隱式轉換。 – nymk

+0

@nymk你有任何建議來解決它嗎?謝謝。 – jason

回答

3

編寫一個新的包裝函數來包裝func,然後使用包裝函數。

func' :: Integer -> 
     (Integer,Integer) -> 
     [[String]] -> 
     ([Char],[Char],[Char],[Char]) -> 
     (Int,Int) 
func' a b c d = (fromInteger x, fromInteger y) where 
    (x, y) = func a b c d 

或者,你可以插入到fromInteger來電直接進入func

這裏的問題是,IntInteger是不同的類型,編譯器不會隱式地在它們之間進行轉換 - 您必須明確地進行轉換,因此需要調用fromIntegerfromIntegerInteger轉換爲任何數字類型。