Function Haskell:作为类型声明的函数

Function Haskell:作为类型声明的函数,function,haskell,typeclass,Function,Haskell,Typeclass,我想为图形实现一些函数 类型声明为: type Graph = Knoten -> [Knoten] 对于一个函数,我必须浏览列表[Knoten]。我有正确的算法,但不知道如何访问[Knoten] 以下是我的尝试: ist_minimal :: Graph -> Bool ist_minimal g = minimalHelp g minimalHelp :: Knoten -> [Knoten] -> Bool minimalHelp _ [] = True min

我想为图形实现一些函数

类型声明为:

type Graph = Knoten -> [Knoten]
对于一个函数,我必须浏览列表
[Knoten]
。我有正确的算法,但不知道如何访问
[Knoten]

以下是我的尝试:

ist_minimal :: Graph -> Bool
ist_minimal g = minimalHelp g

minimalHelp :: Knoten -> [Knoten] -> Bool
minimalHelp _ [] = True
minimalHelp k (m:ms) 
 | elem m ms = False
 | otherwise = minimalHelp k ms

我的考虑是,当

Graph = Knoten -> [Knoten]

可以将图形编写为无法工作的
Knoten[Knoten]

Knoten->[Knoten]->Bool
表示
Knoten->([Knoten]->Bool)
Graph->Bool
表示
(Knoten->[Knoten])->Bool
,这些是非常不同的类型

基本上,使用
Knoten->[Knoten]
(以及
图形
)可以做的唯一一件事就是在一些
Knoten
上调用它,因此您的函数需要通过此操作构建。例如,调用
minimal\u help
的一个可能的
ist\u minimal::Graph->Knoten

ist_minimal g = minimal_help k (g k)
    where k = ...

并且需要填充
../code>以使您得到某种类型的
Knoten
g k
将具有类型
[kneen]
的类型,因此该代码将通过
Knoten
和a
[Knoten]
minimum\u help
,这是因为它的类型需要。

还可以注意
ist\u minimal g=minimal g
,对函数使用
Applicative
实例。@切普纳我认为,对于像这样提出问题的人来说,这还为时过早,而且只会分散注意力:)不建议使用它,但我发现,看看我得到的模式(或自己偶然发现的模式)实际上何时被更高的抽象所捕获是很有用的。如果没有别的,这仅仅是另一个例子,将有助于建立
Applicative
如何工作的直觉。
ist_minimal g = minimal_help k (g k)
    where k = ...