
There is now a way to do this :). What used to be the Haskell Array Preprocessor is not the Haskell STate Preprocessor (STPP) and it supports now many things: - sugared array reading/writing/updating - sugared hash table reading/writing/updating - monadic if - monadic case Get it from http://www.isi.edu/~hdaume/STPP/ using stpp, you would write monadic case expressions as:
mcase fun of Nothing -> ...
etc, just as you wanted :). mif works the same way (the 'm' prefix was chosen to look like 'mdo'). Of course, it still supprots array reading/writing, such as: do a <- newArray (0,100) 0 a[|5|] <- 7 a[|6|] <- 8 a[|6|] <<- a[|5|] * 2 + a[|6|] furthermore, it supports hash table reading/writing (based on the hash table implementation found at http://www.isi.edu/~hdaume/haskell/Util), as in: do ht <- emptyHT ht{|"hello"|} <- "goodbye" print ht{|"hello"|} All of this works both in the IO monad and the ST monad. Comments/Suggestions/Bug reports to me please. -- Hal Daume III "Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume
mp <- fun case mp of Nothing -> deal with error Just p -> do something with p
where it would be much nicer to be able to just use
caseM fun of Nothing -> deal with error Just p -> do something with p
which would avoid confusion when reading the code as to whether the value mp may be used later in the function. Any ideas how to do something like this?