试图理解haskell';s代码
以下是Haskell代码,它编译:试图理解haskell';s代码,haskell,Haskell,以下是Haskell代码,它编译: class Category categ where method1 :: categ a a method2 :: categ a b -> categ b c -> categ a c 但我不明白它的意思: 什么是categ?如何定义:通过数据或类?大概 这是一个功能 什么是a和b和c?因为它们没有指定为 class Category categ a b c where method1 :: categ a a met
class Category categ where
method1 :: categ a a
method2 :: categ a b -> categ b c -> categ a c
但我不明白它的意思:
categ
?如何定义:通过数据
或类
?大概
这是一个功能
a
和b
和c
?因为它们没有指定为
class Category categ a b c where
method1 :: categ a a
method2 :: categ a b -> categ b c -> categ a c
这段代码不应该编译,是吗Category
的类型类。categ
是用于引用相关功能中实现类别的a类型的变量。以后你会在你说
instance Category Foo where
....
然后,在类型类方法中使用categ
的地方,替换Foo
并定义方法
大声读出来,因为“类型categ
是类别
,如果它有以下方法”
现在,关于方法:
method1 :: categ a a
method2 :: categ a b -> categ b c -> categ a c
声明实现类别
的任何类型都必须实现的2个函数。第一个是无参数函数,对于任何类型a
,该函数返回类型catega
method2
接收两段数据,categab
和categbc
,并返回categac
这里的abc
是类型变量,它们是在调用函数时用任意具体类型填充的占位符。如果你熟悉C++或java,
template<typename A>
categ<A, A> method1();
模板
卡特。它是免费的,将涵盖您刚刚发布的代码的所有方面
这是一个类型类声明
它声明了一个名为Category
的类型类。categ
是用于引用相关功能中实现类别的a类型的变量。以后你会在你说
instance Category Foo where
....
然后,在类型类方法中使用categ
的地方,替换Foo
并定义方法
大声读出来,因为“类型categ
是类别
,如果它有以下方法”
现在,关于方法:
method1 :: categ a a
method2 :: categ a b -> categ b c -> categ a c
声明实现类别
的任何类型都必须实现的2个函数。第一个是无参数函数,对于任何类型a
,该函数返回类型catega
method2
接收两段数据,categab
和categbc
,并返回categac
这里的abc
是类型变量,它们是在调用函数时用任意具体类型填充的占位符。如果你熟悉C++或java,
template<typename A>
categ<A, A> method1();
模板
卡特。它是免费的,将涵盖您刚刚发布的代码的所有方面。我在问实例类别Foo在哪里
--如何定义Foo:通过类、数据或其他什么?它可能是函数吗?@MariusKavansky你能解释一下“它怎么可能是函数”的意思吗?@MariusKavanskyFoo
必须是一种具体类型(定义为data
或newtype
)类型*->*->*
,也就是说,它必须有两个类型变量。它可能是函数的类型(>)
,如果你是这个意思的话。@phg,这正是我的意思。也可能是类吗?不,不是直接的,因为类与类型不同。您可以做的是使一个类的所有实例成为另一个类的实例,比如实例Monad m=>Category(Kleisli m)where…
我在问实例Category Foo where
--如何定义Foo:通过类、数据或其他什么?它可能是函数吗?@MariusKavansky你能解释一下“它怎么可能是函数”的意思吗?@MariusKavanskyFoo
必须是一种具体类型(定义为data
或newtype
)类型*->*->*
,也就是说,它必须有两个类型变量。它可能是函数的类型(>)
,如果你是这个意思的话。@phg,这正是我的意思。也可能是类吗?不,不是直接的,因为类与类型不同。您可以做的是使一个类的所有实例成为另一个类的实例,比如instance Monad m=>Category(Kleisli m),其中…