[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.
Regards,
apfelmus
More information about the Haskell-Cafe
mailing list