Albert Y. C. Lai wrote: > [EMAIL PROTECTED] 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe