Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何找出列表类型所属的类?_List_Haskell_Instance_Typeclass_Deriving - Fatal编程技术网

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

List 如何找出列表类型所属的类?,list,haskell,instance,typeclass,deriving,List,Haskell,Instance,Typeclass,Deriving,如何找出列表类型所属的类 在说 数据[a]=[]| a:[a]推导(Eq,Ord) 及 列表是Read、Show、Eq、Ord、Monad、Functor和MonadPlus类的实例 为什么上述两种观点不完全一致 列表类型是否为可折叠类的实例? 如果是,为什么上面的链接没有提到 谢谢 为什么上述两种观点不完全一致 这两种说法根本不冲突 表示编译器将自动派生实例。因此,不需要显式定义实例子句。该报告还指定此自动实例的外观 Haskell报告提到,只能自动派生有限数量的类型类: C是Eq,Ord,E

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

在说

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

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

为什么上述两种观点不完全一致

列表类型是否为可折叠类的实例? 如果是,为什么上面的链接没有提到

谢谢

为什么上述两种观点不完全一致

这两种说法根本不冲突

表示编译器将自动派生实例。因此,不需要显式定义
实例
子句。该报告还指定此自动实例的外观

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

C是
Eq
Ord
Enum
有界
显示
,或
读取
中的一种

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

除了Haskell可以自动派生的一个之外,您还可以使用

例如,我们可以通过以下方式定义自己:

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

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

它们确实
派生
意味着Haskell可以自动实现
Eq
Ord
类(这意味着您不需要自己实现这些)。其他的是通过显式的
实例Monad
实现的,等等。(1)您的意思是默认列表不是Monad的实例吗?如果我想,我必须明确声明?(2) 列表类型是可折叠类的实例吗?如果是,为什么在上面的链接中没有提到呢?不,这只是意味着Haskell可以自动实现类型类的某些实例:它们是
Eq
Ord
Enum
Bounded
Show
Read
。谢谢。(1) 我不知道你的意思。(3) 如何查找某个类型(例如列表类型)所属的所有类?使用
: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’