Haskell:作为Typedeclaration的函数

时间:2017-11-21 13:05:52

标签: function haskell typeclass

我想为图表实现一些功能。

类型声明是:

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

ist_minimal :: Graph -> Bool
ist_minimal (k ks) = minimalHelp (k ks)     --k=Knoten, ks=[Knoten]

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

我的考虑是,当

Graph = Knoten -> [Knoten]

可以将图形编写为Knoten [Knoten]

1 个答案:

答案 0 :(得分:1)

那不会奏效。 Knoten -> [Knoten] -> Bool表示Knoten -> ([Knoten] -> Bool),而Graph -> Bool表示(Knoten -> [Knoten]) -> Bool,而且这些类型非常不同。

基本上你唯一可以使用Knoten -> [Knoten](以及Graph这样做)是在Knoten上调用它,所以你的函数需要从这个构建操作。例如。调用ist_minimal :: Graph -> Knoten的一个minimal_help可能是

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

...需要填写,以便为您提供Knoten类型的内容:g k类型为[Knoten],因此此代码会传递Knoten以及[Knoten]minimal_help,其类型需要。