Sven
Sven

Reputation: 1133

Haskell parse error on input `|'

Haskell keeps giving this and I can't see why. Tried to rewrite with if/else but then it complains about that...

Error message; 2006grafen.hs:40:12: parse error on input `|'

Code:

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

Upvotes: 1

Views: 2860

Answers (1)

Pedro Rodrigues
Pedro Rodrigues

Reputation: 1739

You forgot to close the parenthesis in ((gradenL, sort(nodenL:n)).

The outher parentheses are redundant anyway, so you could simply write (gradenL, sort $ nodenL : n)

Upvotes: 7

Related Questions