
Henning Thielemann wrote:
At http://www.haskell.org/hawiki/HaskellDbTutorial it is described, how database queries can be modelled with a monad. However, I wonder if this is also possible without monads. Say, writing
"DB.map col1 $ DB.filter (\row -> col2 row == 10+2) myTable"
for
"SELECT col1 FROM MyTable where col2 = 10+2"
If and only if the database is a purely functional immutable data structure, this can be done. This is because the $ operator, function application, is used for control and/or dataflow. Many interesting databases are not purely functional immutable; most reside in the external world and can spontaneously change behind your program's back. The >>= operator generalizes from function application to these cases. Thus the monadic way subsumes the functional way and covers other uses. You can also make it an arrow. You can also make it an applicative.