Gepostet: |
IO-Fehler | ||||||||||
Hallo! Hier mal eben mein Problem... Code sagt mehr als Tausend Worte: main = map f [1..10] Die Funktion f tut ihren Dienst und schreibt ein Ergebnis in die Datei. Ich würde nun gern f (per main) aufrufen mit jeweils anderer Variable - hier [1..10]. Als Ausgabe stelle ich mir das dann so vor: 2 3 4 . . 11 Nur leider kommt an dieser Stelle der IO-Fehler zum tragen: No instance for (Show (IO ())) arising from a use of `print' at <interactive>:1:0-4 Possible fix: add an instance declaration for (Show (IO ())) In a stmt of a 'do' expression: print it Ich komm aber nicht drauf, wie ich das mit do lösen kann. Hoffentlich könnt ihr mir helfen. Danke im Voraus! Brewer |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, also der Fehler stimmt nicht mit dem Code überein, da du gar kein print verwendest. ;-) Es funktioniert aber trotzdem nicht, denn main muss vom Typ IO () sein. Bei deinem Code ist f momentan (vereinfacht) vom Typ Int -> IO (), d.h. bei Verwendung von map kommt als Ergebnistyp [IO ()] heraus, was nicht mit IO () zusammenpasst. Wenn du statt map die Funktion mapM_ (hat (vereinfacht) den Typ (Int -> IO ()) -> [Int] -> IO ()) verwendest sollte es funktionieren. Als Tipp: Schreibe zu jeder Funktionsdefinition zunächst eine Typsignatur, das hilft beim Entwickeln der Funktionen, beim Debuggen und beim späteren Verstehen des Codes. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Vielen Dank für die schnelle Hilfe! Mit mapM_ klappt es wunderbar. Das IO () und [IO ()] nicht zusammen passen, ist mir auch aufgefallen :D Nur hab ich keine Lösung dafür gefunden. Der print-Fehler kommt übrigens genaus so bei dem Beispiel. Danke nochmal. Brewer |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Der print-Fehler kommt übrigens genaus so bei dem Beispiel. Hä, das wundert mich aber. Benutzt du Hugs oder den GHC? Und welche Version? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
GHCi 6.10.4... sollte die aktuelle sein. Ist im neuesten Haskell Platform 2009.2.0.2 drin. | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hab's mal mit dem GHCi 6.10.4 probiert. Wenn ich obigen Code lade kommt aber: Couldn't match expected type `IO t' against inferred type `[IO ()]' In the expression: main When checking the type of the function `main' Allerdings im Interpreter nur [return () :: IO ()] eingeben bringt den gleichen Fehler wie bei dir: No instance for (Show (IO ())) arising from a use of `print' at <interactive>:1:0-19 Possible fix: add an instance declaration for (Show (IO ())) In a stmt of a 'do' expression: print it Vermutlich ruft der da intern print auf, um das Ergebnis auszugeben. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||