2016-04-13 5 views
2

Mein Code funktioniert in GHCi, aber wenn ich versuche, das Projekt mit cabal build zu bauen, gibt es den Fehler parse error on input ‘<-’Kabale Build gibt Parse-Fehler, aber Code funktioniert gut in GHCi

Hier ist ein minimales Beispiel:

foo :: IO() 
foo = do 
    let x = do 
     b <- getLine 
     return b 
    return() 
+3

Sind Sie sicher, dass Sie keine Tabs verwenden? Sie sind nicht verboten, aber sie können unvorhersehbare Dinge tun. –

+1

das Snippet, wie es in eine neue Datei kopiert und eingefügt wird, funktioniert wie deklariert - Übrigens: Ist Ihnen bewusst, dass 'x' nichts tut? – Carsten

+0

Ich habe es herausgefunden! Siehe meine Antwort. @PaulJohnson gibt es keine Tabs. –

Antwort

2

Es stellt sich heraus, dass meine GHCi die -XNondecreasingIndentation Erweiterung verwenden eingerichtet ist, die mit dem Befehl :show language

gesehen werden kann
base language is: Haskell2010 
with the following modifiers: 
    -XNoDatatypeContexts 
    -XNondecreasingIndentation 
dieser

Ohne diese Erweiterung ist schlecht Syntax:

foo :: IO() 
foo = do 
    let x = do 
     b <- getLine 
     return b 
    return() 

aber das ist in Ordnung:

foo :: IO() 
foo = do 
    let 
     x = do 
      b <- getLine 
      return b 
    return() 

das Problem zu beheben, fügen Sie

default-extensions: 
    NondecreasingIndentation 

zum .cabal Datei, oder wenn Sie bevorzugen hinzufügen {-# language NondecreasingIndentation #-} zu nur diesem einen Modul. Alternativ formatieren Sie den Code wie oben beschrieben oder verwenden Sie Haskell98 anstelle von Haskell2010.