[Haskell-cafe] Re: functional database queries

apfelmus at quantentunnel.de apfelmus at quantentunnel.de
Wed Feb 21 14:47:19 EST 2007

Albert Y. C. Lai wrote:
> apfelmus at quantentunnel.de wrote:
>> Albert Y. C. Lai wrote:
>>> If and only if the database is a purely functional immutable data
>>> structure, this can be done. [...]
>>> Many interesting databases are not purely functional immutable; most
>>> reside in the external world and can spontaneously change behind your
>>> program's back.
>> I don't think this is the problem because SQL requests are emitted
>> atomically anyway. The (Query a) monad here has nothing to do with
>> mutability of the data base.
> The same clock read twice, each reading atomic, can give two different
> results. (Cf. the monadic type signature of
> Data.Time.Clock.getCurrentTime.)
> The same SELECT to the same database issued twice, each time atomic, can
> give two different results.

Yeah, of course. That's why the function that executes the query is in
the IO-monad:

    query :: GetRec er vr =>
        Database -> Query (Rel er) -> IO [Record vr]

Hennings' question is whether the query type 'Query (Rel el)' really has
to be a monad, not whether the function 'query' has to be in the
IO-monad. In other words, 'Query a' just assembles a valid SQL-string,
it does not query or execute anything.


More information about the Haskell-Cafe mailing list