M.K*_*.K. 1 haskell functional-programming
在Benjamin Pierce关于类型和编程语言的书中,他将不同类型的类别分类如下:
*那种合适的类型(比如Bool和Bool -> Bool)* -> * 类型操作符的类型(即从适当类型到适当类型的函数)* -> * -> * 从适当类型到类型运算符的函数类型(即双参数运算符)(* -> *) -> * 类型操作符到适当类型的函数类型如果我们考虑元组(1,2),如果我在Haskell GHCI中查询它的类型和种类,我得到:
Prelude> :t (1,2)
(1,2) :: (Num t1, Num t) => (t, t1)
Prelude> :k (,)
(,) :: * -> * -> *
Run Code Online (Sandbox Code Playgroud)
我不明白* -> * -> *他的定义如何落入第3类.据我所知,(,)采用两种合适的类型来产生另一种合适的类型,而不是皮尔斯状态,它是从适当类型到类型操作符的函数.
我可能没有正确解释皮尔斯的分类.有人可以使用我的2元组示例扩展类别3.
Car*_*arl 10
种类与种类一样是咖喱.
(,)(值构造函数)的类型是a -> b -> (a, b).类型(,) ()是b -> ((), b).类型(,) () ()是((), ()).
种类的工作方式完全相同.那种(,)(类型构造)是* -> * -> *.那种(,) ()是* -> *.这正是皮尔斯所说的.(当然,那种(,) () ()是*).
编辑
第四类是一个如下所示的类型:
newtype Fourth f = Fourth (f ())
Run Code Online (Sandbox Code Playgroud)
该Fourth类型的构造函数有样(* -> *) -> *.它可以作为任何类型的参数作为参数(* -> *),如Maybe或[].所以类型喜欢Fourth Maybe或Fourth []有类型*.