2017-01-02 4 views
1

Durch Huttons neuen Text arbeitete ich seltsames Verhalten in Ghci. Wenn ich die Funktion altmap aus einer Textdatei lade, verhält es sich korrekt; aber die Eingabe der gleichen zwei Zeilen direkt in GHCI gibt den Fehler unten:Haskell: GHCi Skript gegen direkte Eingabe

*Main Lib> altmap f g [] = [] 

*Main Lib> altmap f g (x:y:xs) = (f x):(g y):(altmap f g xs) 

*Main Lib> altmap (2*) (3*) [1,2,3,4,5,6] 

[2,6,6,12,10,18*** Exception: interactive:2:1-49: Non-exhaustive patterns in function altmap 

Während ich schon mal dabei bin, kann jemand den Unterschied zwischen „Prelude“ und „Haupt Lib“ erklären? Ich verwende die rc2-Version von ghc 8.0.2

+0

Beachten Sie, dass Sie in GHCi vor Version 8 'let ... = ...' verwenden mussten. – Zeta

Antwort

0

Die spätere Definition von altmap überschreibt die ältere. Daher haben Sie wirklich nur ein Muster definiert.

Grundsätzlich haben Sie dies:

ghci> x = 5 
ghci> x = 42 
ghci> print x 
42 

entweder Sie müssen beide in der gleichen Linie definieren, oder verwenden Sie Multi-Linien:

*Main Lib> altmap f g [] = []; altmap f g (x:y:xs) = f x : g y : atmap f g xs 

Beachten Sie, dass altmap f g xs auch als zipWith ($) (cycle [f,g]) xs geschrieben werden können.

Für Ihre zusätzliche Frage: die Module vor dem > sind diejenigen, die Sie gerade importiert haben. So haben Sie Main (mit allen Symbolen) und Lib importiert. Weitere Informationen finden Sie in der GHC-Dokumentation.

+0

Hm. Jetzt, wo ich das Duplikat gefunden habe, sollte ich meine Antwort löschen? – Zeta