关于Haskell编程语言的一些问题:
这两个代码语句有什么区别?我确信他们应该是一样的:
type T = [Char]
type CurrentValue = Char
我担心的是,在第二个问题中,没有括号。
无论如何,它们实际上是声明,不是吗?
什么是Maybe String
?
例如:type P = (Char, Maybe String)
这是一个有两个参数的函数吗?
什么是Maybe Char
?
例如:type D = ((Maybe Char) , Char)
这是另一个带有三个参数的函数,对吗?
答案 0 :(得分:6)
这两个代码语句之间有什么区别?
type T = [Char] type CurrentValue = Char
第一行为T
声明了一个类型别名[Char]
,它是一个字符列表。
第二行为CurrentValue
声明另一个类型别名Char
,一个字符。
什么是
Maybe String
?
类型构造函数Maybe
的应用程序类型String
(它只是[Char]
的别名)。它类似于括号如何将类型转换为该类型的列表,除了Maybe
使事物可选。
例如:
type P = (Char, Maybe String)
这是一个有两个参数的函数吗?
不,这是两个元素的tuple type。第一个元素是Char
,第二个元素是Maybe String
。
什么是
Maybe Char
?例如:
type D = ((Maybe Char) , Char)
这是另一个有三个参数的函数。我是对的吗?
这又是元组类型。第一个元素的类型是Maybe Char
,第二个元素是Char
。内括号是多余的,因此它与type D = (Maybe Char, Char)
相同。
答案 1 :(得分:5)
Re 1)T
是字符列表([Char]
)的类型同义词,而CurrentValue是单个字符(Char
)的类型同义词。
更多信息:http://learnyouahaskell.com/making-our-own-types-and-typeclasses#type-synonyms
Re 2)Maybe a
可以包含Just a
或Nothing
的值。想象一下可能出错的计算:如果它通过,它将返回包含在Just
中的结果,如果失败,它将返回Nothing
。在这种特定情况下,它会返回String
包含在[Char]
中的Just
(其中btw也是GOA> Just "foo"
Just "foo"
GOA> :type Just "foo"
Just "foo" :: Maybe [Char]
的类型同义词)。
GOA> :type Just 'f'
Just 'f' :: Maybe Char
重新3)请参阅第二个问题的答案,但是对于单个字符而不是字符列表。
{{1}}
更多信息:http://en.wikibooks.org/wiki/Haskell/Hierarchical_libraries/Maybe
答案 2 :(得分:3)
1)使用type
,您可以声明type synonym。因此,对于type T = [Char]
,T是[Char]的类型同义词(Chars列表;方括号表示Haskell中的列表),这意味着T可以在程序中的任何位置用[Char]替换(反之亦然) 。所以不要担心缺少括号。
2)也许String是一个类型,其值可以包含字符串。也许像指针一样常用于像C这样的语言:如果函数返回一个Maybe String,则意味着该函数成功并返回一个字符串,或者它失败并且不返回字符串。您可以阅读有关Maybe类型here的更多信息。
使用type P = (Char, Maybe String)
类型同义词P被声明为元组的同义词。元组的第一个元素具有Char类型,第二个元素具有Maybe String。
3)type D = ((Maybe Char), Char)
或type D = (Maybe Char, Char)
(内部括号是不必要的),声明一个元组的同义词,其中包含Maybe Char和Char作为内部类型。
答案 3 :(得分:0)
Char类型表示一个字符,而[Char]表示字符列表(即字符串)。
type T = [Char]
相当于
type T = String
如果您有类型t,那么直观地说,Maybe t表示具有相同值的类型 t加上一个额外的未定义值(Nothing)。 在其使用中,它(非常)粗略地对应于Java对象的空值。
因此,String和Char表示字符串和字符类型,Maybe String和Maybe Char表示字符串resp。字符也可以是未定义的。