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

标签 list haskell instance typeclass deriving

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

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

data [a] = [] | a : [a] deriving (Eq, Ord)

Lists are an instance of classes Read, Show, Eq, Ord, Monad, Functor, and MonadPlus.

为什么上面两者不完全一致?

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

谢谢。

最佳答案

Why do the two above not agree completely with each other?

这两个陈述根本不冲突。

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

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

C is one of Eq, Ord, Enum, Bounded, Show, or Read.

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

除了 Haskell 可以自动派生的之外,您还可以使用 instance block [Haskell'10 report] 手动实例化其他实例。 .

例如,我们可以自己定义也许:

data Maybe a = Nothing | Just a <b>deriving</b> (Show, Eq, Ord)

<b>instance</b> 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’

关于list - 如何找出列表类型所属的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232488/

相关文章:

ubuntu - Openstack 创建新的 Ubuntu 实例

c# - 重新定位列表中的项目

python - 在元组列表中查找重复项

python-2.7 - 在 Python 2.7 中使用 `scandir`

performance - Data.Sequence.Seq 与 [] 相比有多快?

haskell - 为什么我的 Yesod 应用程序在我尝试登录时抛出 TlsNotSupported 异常?

Haskell 独立决定为我的数据类型推断 Bifunctor?

java - 从 foreach 循环中删除其他 foreach 中的项目并使用相同的列表

haskell - 如何理解Haskell中的 "(Num b) => length::[a] -> b"?

java - 为什么 VisualVM float 实例似乎不包含其他类中的 float ?