输入"|"时Haskell解析错误

Sve*_*ven 1 haskell

Haskell一直在给这个,我不明白为什么.试图用if/else重写然后它抱怨那个......

错误信息; 2006grafen.hs:40:12:输入`|'解析错误

码:

data Edge a = Boog a a deriving Show
data Graph a = Graaf [a] [Edge a] deriving Show

vindBuren :: Eq a => a -> Graph a -> [a]
vindBuren _ (Graaf list []) = []
vindBuren knoop (Graaf list ((Boog x y):rest))
       | knoop == x = y : (vindBuren knoop (Graaf list rest))
       | knoop == y = x : (vindBuren knoop (Graaf list rest))
       | otherwise = vindBuren knoop (Graaf list rest)

graadKnoop :: Eq a => Graph a -> a -> Int
graadKnoop graaf el = length (vindBuren el graaf) 


buurgraadKnoop :: Eq a => Graph a -> a -> [Int]
buurgraadKnoop graaf el = 
       let
           buren = vindBuren el graaf
       in
          reverse $ sort $ map (graadKnoop graaf) buren

buurgraad :: Eq a => Graph a -> [([Int],[a])]
buurgraad graaf = hulp graaf []


hulp :: Eq a => Graph a -> [([Int],[a])] -> [([Int],[a])]
hulp (Graaf [] bgL) soFar = soFar
hulp g@(Graaf (fstN:restN) l) soFar
       | elem bgraden (map fst soFar) = hulp (Graaf restN l) (mergeG fstN bgraden soFar)
       | otherwise = hulp (Graaf restN l) [(bgraden,[fstN])]:soFar
       where
           bgraden = buurgraadKnoop g fstN

mergeG :: a -> [Int] -> [([Int],[a])] -> [([Int],[a])]
mergeG n ngraden ((gradenL,nodenL):rest)
           | ngraden == gradenL = ((gradenL, sort(nodenL:n)):rest
           | otherwise = mergeG n ngraden rest
Run Code Online (Sandbox Code Playgroud)

Ped*_*ues 7

你忘了关闭括号((gradenL, sort(nodenL:n)).

无论如何,其他括号都是多余的,所以你可以简单地写 (gradenL, sort $ nodenL : n)