了解类型

时间:2011-07-02 15:16:52

标签: haskell

关于Haskell编程语言的一些问题:

  1. 这两个代码语句有什么区别?我确信他们应该是一样的:

    type T = [Char]
    type CurrentValue = Char  
    

    我担心的是,在第二个问题中,没有括号。

    无论如何,它们实际上是声明,不是吗?

  2. 什么是Maybe String

    例如:type P = (Char, Maybe String)

    这是一个有两个参数的函数吗?

  3. 什么是Maybe Char

    例如:type D = ((Maybe Char) , Char)

    这是另一个带有三个参数的函数,对吗?

4 个答案:

答案 0 :(得分:6)

  1.   

    这两个代码语句之间有什么区别?

    type T = [Char]
    type CurrentValue = Char  
    

    第一行为T声明了一个类型别名[Char],它是一个字符列表。 第二行为CurrentValue声明另一个类型别名Char,一个字符。

  2.   

    什么是Maybe String

    类型构造函数Maybe的应用程序类型String(它只是[Char]的别名)。它类似于括号如何将类型转换为该类型的列表,除了Maybe使事物可选。

      

    例如:type P = (Char, Maybe String)

         

    这是一个有两个参数的函数吗?

    不,这是两个元素的tuple type。第一个元素是Char,第二个元素是Maybe String

  3.   

    什么是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 aNothing的值。想象一下可能出错的计算:如果它通过,它将返回包含在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。字符也可以是未定义的。