以下程序在 ghci 中产生错误:
{-# LANGUAGE NoImplicitPrelude #-}
import Prelude (Integer, Bool)
import qualified Prelude
class Discrete a where
(==) :: a -> a -> Bool
instance Discrete Integer where
(==) = (Prelude.==)
class Monoid a where
one :: a
(*) :: a -> a -> a
fromInteger :: Integer -> a
fromInteger 1 = one
即:
fromInteger.hs:17:16:
(Monoid Integer) 没有
由文字 fromInteger' 产生的实例:fromInteger 1 = one1' at fromInteger.hs:17:16
Possible fix: add an instance declaration for (Monoid Integer)
In the pattern: 1
In the definition of
如何修复它以便 1 可以转换one
为 Monoids 的值?所有其他整数Prelude.undefined
在应用于 时可能(或应该)产生(Monoid a) => fromInteger
。
请注意,我是 Haskell 专家的对立面,所以如果答案很明显,请原谅我。