Следующая программа выдает ошибку в 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)
возникающего из литерала1' at fromInteger.hs:17:16
fromInteger ': fromInteger 1 = one
Possible fix: add an instance declaration for (Monoid Integer)
In the pattern: 1
In the definition of
Как я могу это исправить, чтобы 1 можно было преобразовать в значение one
для моноидов? Все остальные целые числа могут (или должны) давать Prelude.undefined
при применении к (Monoid a) => fromInteger
.
Имейте в виду, что я - полная противоположность эксперту по Haskell, поэтому, пожалуйста, простите меня, если ответ очевиден.