How to get rid of IO
From HaskellWiki
(Small text about that really FAQ) |
(Small text about that really FAQ) |
||
| Line 38: | Line 38: | ||
[[Category:FAQ]] | [[Category:FAQ]] | ||
| + | [[Category:Monad]] | ||
Revision as of 09:08, 28 April 2009
Contents |
1 Question
I have something of typeHow can I get that?
2 Answer
You can get rid of it, but we don't tell you, how, since it is certainly not what need. It is the special safety belt of Haskell, that you cannot get rid of IO! Nonetheless, the biggest parts of Haskell programs are and should be non-IO functions. This is achieved by plugging together IO functions and non-IO functions
using atomic combinator functions likeIf that scares you, you can hide that in the do notation, which will then look quite conveniently as:
do text <- readFile "foo" writeFile "bar" (someComplicatedNonIOOperation text)
Btw. using the combinators this would look like
writeFile "bar" . someComplicatedNonIOOperation =<< readFile "foo"
2.1 What we didn't tell you at the beginning
Btw. The function that answers your initial question isIt must only be used to wrap IO functions that behave like non-IO functions,
Since this property cannot be checked by the compiler, it is your task and thus the(Some library writers have abused that name component for partial functions. Don't get confused!) You will only need this in rare cases and only experienced programmers shall do this.
3 See also
- Avoiding IO - Avoiding IO in the first place is a good thing, and we tell you how to achieve that
- http://www.haskell.org/wikisnapshot/ThatAnnoyingIoType.html
- http://www.haskell.org/wikisnapshot/UsingIo.html
Categories: FAQ | Monad
