【发布时间】:2010-10-19 14:29:37
【问题描述】:
以下程序在 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
即:
来自Integer.hs:17:16:
没有 (Monoid Integer) 的实例
源自文字1' at fromInteger.hs:17:16fromInteger': fromInteger 1 = one
Possible fix: add an instance declaration for (Monoid Integer)
In the pattern: 1
In the definition of
我该如何解决它,以便将 1 转换为 Monoids 的值 one?当应用于(Monoid a) => fromInteger 时,所有其他整数可能(或应该)产生Prelude.undefined。
请注意,我是 Haskell 专家的对立面,所以如果答案很明显,请原谅我。
【问题讨论】: