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