Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Haskell 类型分类_Haskell_Functional Programming - Fatal编程技术网

Haskell 类型分类

Haskell 类型分类,haskell,functional-programming,Haskell,Functional Programming,在Benjamin Pierce关于类型和编程语言的书中,他将不同类型分类如下: *正确类型的类型(如Bool和Bool->Bool) *->*类型运算符的类型(即,来自正确类型的函数 (适用于适当类型) *->*->*从正确类型到类型运算符的函数类型 (即,两个参数运算符) (*->*)->*从类型运算符到正确类型的函数类型 如果考虑元组(1,2)< /代码>,如果查询Haskell GHCI中的类型和类型,则得到: Prelude> :t (1,2) (1,2) :: (Num t1,

在Benjamin Pierce关于类型和编程语言的书中,他将不同类型分类如下:

  • *
    正确类型的类型(如
    Bool
    Bool->Bool
  • *->*
    类型运算符的类型(即,来自正确类型的函数 (适用于适当类型)
  • *->*->*
    从正确类型到类型运算符的函数类型 (即,两个参数运算符)
  • (*->*)->*
    从类型运算符到正确类型的函数类型
  • 如果考虑元组<代码>(1,2)< /代码>,如果查询Haskell GHCI中的类型和类型,则得到:

    Prelude> :t (1,2)
    (1,2) :: (Num t1, Num t) => (t, t1)
    
    Prelude> :k (,)
    (,) :: * -> * -> *
    
    我看不出
    *->*->*
    在他上面的定义中属于第三类。据我所知,
    (,)
    需要两个适当的类型来生成另一个适当的类型,而不是像皮尔斯所说的那样,它是从适当类型到类型运算符的函数


    我可能没有正确解释皮尔斯的分类。请有人用我的二元组例子来扩展类别3。

    种类和类型一样

    (,)
    (值构造函数)的类型是
    a->b->(a,b)
    (,)()
    的类型是
    b->((),b)
    (,)()()
    的类型是
    ((),())

    两种类型的工作方式完全相同。
    (,)
    (类型构造函数)的类型是
    *->*->*->*
    (,)()
    的类型是
    *->*
    。这正是皮尔斯所说的。(当然,
    (,)()
    的类型是
    *


    编辑

    第四类是如下所示的类型:

    newtype Fourth f = Fourth (f ())
    

    第四个
    类型构造函数具有种类
    (*->*)->*
    。它可以将任何类型的
    (*->*)
    作为参数,例如
    可能
    []
    。所以像
    Fourth或
    Fourth[]
    这样的类型可能有种类
    *

    种类和类型一样

    (,)
    (值构造函数)的类型是
    a->b->(a,b)
    (,)()
    的类型是
    b->((),b)
    (,)()()
    的类型是
    ((),())

    两种类型的工作方式完全相同。
    (,)
    (类型构造函数)的类型是
    *->*->*->*
    (,)()
    的类型是
    *->*
    。这正是皮尔斯所说的。(当然,
    (,)()
    的类型是
    *


    编辑

    第四类是如下所示的类型:

    newtype Fourth f = Fourth (f ())
    

    第四个
    类型构造函数具有种类
    (*->*)->*
    。它可以将任何类型的
    (*->*)
    作为参数,例如
    可能
    []
    。所以像
    Fourth可能
    Fourth[]
    这样的类型有种类
    *

    @I.K.好的,添加了一个例子。@I.K.好的,添加了一个例子。