2017-10-23 6 views
0

Ich bin mir nicht sicher, warum der folgende Code den folgenden Fehler verursacht.Haskell-Typ Fehler beim Kompilieren

Code:

type Symbol = Char 

symbols :: [Symbol] 
symbols = ['a'..'f'] 

type Code = [Symbol] 

members :: Code -> Bool 
members xs = and [ b | x <- xs, b <- map (elem x) symbols ] 

Compilation Fehler:

Couldn't match type ‘Char’ with ‘t0 Symbol’ 
    Expected type: [t0 Symbol] 
     Actual type: [Symbol] 
    • In the second argument of ‘map’, namely ‘symbols’ 
    In the expression: map (elem x) symbols 
    In a stmt of a list comprehension: b <- map (elem x) symbols 
+3

Ihr Code ist unvollständig - was ist 'xs'? –

+0

@FrankSchmitt Sorry, das war ein Tippfehler, bearbeitet –

Antwort

2

Der Code, den Sie gab ein paar Fehler hat.

  1. Wie bei @FramkSchmitt erwähnt, fehlt ein Parameter xs.
  2. Sie versuchen, elem x über eine Liste zu ordnen - die eine Liste der Listen benötigen würde, um korrekt zu sein.

hier ist, was ich denke, was Sie vorhatten.

members :: Code -> Bool 
members xs = and [ x `elem` symbols | x <- xs ] 

, die etwas prägnanter geschrieben werden kann (ich glaube, Werkzeuge wie hlint würde auch diese Vereinfachung vorschlagen).

members' :: Code -> Bool 
members' = all (`elem` symbols) 
+0

Danke, war einfach nicht sicher, was mit dem 't0' im Fehler gemeint war! –