【发布时间】:2011-01-17 05:40:21
【问题描述】:
我在理解函子时遇到问题,特别是 LYAH 中的 具体 类型是什么。我相信这是因为我不明白 [] 到底是什么。
fmap :: (a -> b) -> f a -> f b
-
[]是类型构造函数吗?或者,它是一个值构造函数? - 具有以下类型是什么意思:
[] :: [a]? - 是
Maybe类型构造函数还是Just值构造函数? - 如果它像
Just,那么Just的签名怎么会像Just :: a -> Maybe a而不是Just :: Maybe a,换句话说,为什么[]没有输入[] :: a -> [a] -
LYAH 是这样说的,因为它适用于函子:注意我们没有在哪里编写 instance Functor [a],因为从
fmap :: (a -> b) -> f a -> f b中,我们看到 f 必须是一个接受一种类型的类型构造函数。[a]已经是一个具体类型(其中包含任何类型的列表),而[]是一个类型构造函数,它采用一种类型并可以生成诸如[Int]、[String]甚至[[String]]之类的类型。 虽然[]的类型暗示它就像[a]的文字,但我很困惑,LYAH 想要达到什么目的?
【问题讨论】:
-
如果你想要 a -> [a] 类型的东西,有一个有趣的 (:[]) 函数。
-
^ 或者你可以使用
return(或pure或其他):D -
标签: list data-structures haskell types