Ich habe eine Liste von Strings, und versuchte, dies:Haskell: Kann "map putStrLn" nicht verwenden?
ls = [ "banana", "mango", "orange" ]
main = do
map PutStrLn list_of_strings
, die nicht funktioniert, und ich kann nicht verstehen, warum.
ghc print-list.hs
print-list.hs:3:0:
Couldn't match expected type `IO t' against inferred type `[IO()]'
In the expression: main
When checking the type of the function `main'
Irgendwelche Hinweise? Ich nehme an, es hat mit Map zu tun, die eine Liste und nicht einen Wert zurückgibt, aber ich fand keine einfache Möglichkeit, das zu beheben.
Im Moment ist die einzige Möglichkeit, eine Liste von Strings zu drucken, eine Funktion zu schreiben, die die Liste iteriert, jedes Element druckt (drucke, wenn die Liste [a] ist, aber printe und rekursiere, wenn es b)). Aber es wäre viel einfacher, einfach zu verwenden Karte ...
Vielen Dank!
Etwas, das ich gerne früher gelernt hätte, war, dass in Data.Traversable eine andere mapM definiert ist. Dieser mapM arbeitet zusätzlich zu Listen, wie z. B. Karten und Arrays, mit mehr Datenstrukturen. –
Ich dachte immer, dass 'main' vom Typ' IO() 'sein sollte, wusste nie, dass es' forall t 'sein könnte. IO t'. Das zeigt, wie man jeden Tag etwas Neues lernen kann :-) –