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 = ...