在Haskell中更改函数类型

时间:2013-03-30 14:23:05

标签: function haskell types

我有一个默认具有此类型的函数:

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

但我希望它返回(Int,Int) 当我写这篇文章时:

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

我收到此错误: 主> :我玩

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)

我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分: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是不同的类型,并且编译器不会隐式地在它们之间进行转换 - 你必须明确地这样做,因此调用{{1} }。 fromIntegerfromInteger转换为任何数字类型。