我想写一些类似的东西:
{-# LANGUAGE FlexibleContexts,FlexibleInstances #-}
import Data.ByteString.Char8 (ByteString,pack)
import Data.Foldable (Foldable)
class (Show a) => Rows a where
rRepr :: a -> [ByteString]
rRepr = (:[]) . pack . show
instance (Foldable f,Show (f a)) => Rows (f a) where
rRepr = const []
意思是f a
实例化Rows
如果f
实例化Foldable
和f a
实例化Show
。当我运行 ghc 我得到:
Constraint is no smaller than the instance head
in the constraint: Show (f a)
(Use -XUndecidableInstances to permit this)
In the instance declaration for `Rows (f a)'
我有两个问题:
- 错误中的“较小”是什么意思,问题是什么?
- 在不使用的情况下定义我想要的东西的正确方法是什么
UndecidableInstances
?