function :: Type1 Type2
Type1
和Type2
是否返回值(元组)?
data Loc = Loc String Int Int
data Parser b a = P (b -> [(a, b)])
parse :: Parser b a -> b -> [(a, b)]
parse (P p) inp = p inp
type Lexer a = Parser (Loc, String) a
item :: Lexer Char
item = ????
如何从项目功能返回Lexer
和Char
?
能不能给我一些简单的例子。
答案 0 :(得分:3)
不,它是不是元组,类型也可以参数化。在像Java这样的命令式语言中,这个概念通常被称为泛型类型(尽管这两个概念没有一对一的映射)。
例如,在Java中,您有以下类:
class LinkedList<E> {
// ...
}
现在我们可以看到LinkedList
作为一个函数,它接受一个参数E
作为输入,然后返回一个真实的类型(例如LinkedList<String>
是一个存储{String
的链表。 1}}为s)。所以我们可以将这种抽象类型看作一个函数。
这也是Haskell中使用的概念。例如,我们有Maybe
类型:
data Maybe a = Nothing | Just a
请注意a
。这是我们需要填写的类型参数。函数无法返回Maybe
,它只能返回填充Maybe a
的{{1}}。例如{{1} }:a
类型为Maybe Char
,Maybe
类型为Nothing
和Just x
。