繁体   English   中英

如何找出列表类型所属的类?

[英]How can I find out the classes which list types belong to?

如何找出列表类型所属的类?

https://www.haskell.org/onlinereport/haskell2010/haskellch6.html中

数据[a] = [] | a:[a]导出(Eq,Ord)

列表是Read,Show,Eq,Ord,Monad,Functor和MonadPlus类的实例。

为什么上面两个不完全相同?

列表类型是Foldable类的实例吗? 如果是,为什么上面的链接中没有提到?

谢谢。

为什么上面两个不完全相同?

这两个陈述完全没有冲突。

deriving [Haskell'10报告]意味着编译器将自动派生实例。 因此,您无需显式定义instance子句。 该报告还指定了此自动实例的外观。

Haskell报告提到只能自动派生有限数量的类型类:

CEqOrdEnumBoundedShowRead

某些ghc扩展允许更自动派生的类型类(如Functor等)。

除了Haskell可以自动派生的那个之外,您还可以使用instance块[Haskell'10报告]手动实例化其他人。

例如,我们可以用以下方式定义Maybe

data Maybe a = Nothing | Just a deriving (Show, Eq, Ord)

instance Functor Maybe where
    fmap _ Nothing = Nothing
    fmap f (Just x) = Just (f x)

因此,我们的Maybe类型是ShowEqOrdFunctor的实例。

ghci ,您可以使用:i来查找类型所属的类型类,例如:

Prelude> :i []
data [] a = [] | a : [a]    -- Defined in ‘GHC.Types’
instance Eq a => Eq [a] -- Defined in ‘GHC.Classes’
instance Monad [] -- Defined in ‘GHC.Base’
instance Functor [] -- Defined in ‘GHC.Base’
instance Ord a => Ord [a] -- Defined in ‘GHC.Classes’
instance Read a => Read [a] -- Defined in ‘GHC.Read’
instance Show a => Show [a] -- Defined in ‘GHC.Show’
instance Applicative [] -- Defined in ‘GHC.Base’
instance Foldable [] -- Defined in ‘Data.Foldable’
instance Traversable [] -- Defined in ‘Data.Traversable’
instance Monoid [a] -- Defined in ‘GHC.Base’

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM