【发布时间】:2019-08-14 20:08:51
【问题描述】:
一旦我成功解决了 Functor 类型类的练习:
data ExactlyOne a = ExactlyOne a deriving (Eq, Show)
instance Functor ExactlyOne where
(<$>) ::
(a -> b)
-> ExactlyOne a
-> ExactlyOne b
(<$>) f a = ExactlyOne $ f (runExactlyOne a)
解决我需要为自定义 Odd 类型定义 Enum 类型类函数的另一个练习。
data Odd = Odd Integer
deriving (Eq, Show)
instance Enum Odd where
-- succ :: Odd -> Odd <-- error
succ (Odd x) = Odd $ x + 2
现在,当我尝试为更简单的函数指定类型签名时,ghci 会报错:
实例声明中的非法类型签名: succ :: Odd -> Odd(使用 InstanceSigs 允许这样做)
没有它也可以,但是我想知道为什么会产生这个错误以及如何为这个函数正确指定类型签名?
【问题讨论】: