我試圖瞭解在this question關於可變參數函數給出的例子並試圖從修改代碼:哈斯克爾可變參數函數和實例聲明
class SumRes r where
sumOf :: Integer -> r
instance SumRes Integer where
sumOf = id
instance (Integral a, SumRes r) => SumRes (a -> r) where
sumOf x = sumOf . (x +) . toInteger
這樣:
class SumRes r where
sumOf :: Int -> r
instance SumRes Int where
sumOf = id
instance (SumRes r) => SumRes (Int -> r) where
sumOf x = sumOf . (x +)
我得到一個Illegal instance declaration for SumRes (Int -> r)
。有人可以解釋這是什麼意思,什麼是我反對的約束?
只要在該文件的頂部添加一個'{ - #LANGUAGE FlexibleInstances# - }'編譯指示,它就可以很好地編譯 – 2013-04-27 17:49:58
但編譯器在抱怨什麼? – me2 2013-04-27 17:51:58
http://hackage.haskell.org/trac/haskell-prime/wiki/FlexibleInstances – 2013-04-27 17:56:11