1

デフォルトでこのタイプの関数があります:

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

しかし、私はそれを返したい (Int,Int) 私がこれを書いたとき:

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

このエラーが発生します: Main> :l play

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)

どうすればこれを修正できますか? ありがとう。

4

1 に答える 1

3

wrapfuncに新しいラッパー関数を記述し、代わりにラッパー関数を使用します。

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が異なる型であり、コンパイラがそれらの間で暗黙的に変換しないことです --- 明示的に変換する必要があるため、fromInteger. から任意の数値型にfromInteger変換します。Integer

于 2013-03-30T14:38:27.357 に答える