
Alex Queiroz wrote:
quickQuery returns a lazy list of results, and I expected ($!) to make it strict. But my program crashes if I use it this way. But, if I add a print to the function:
'Making things strict' isn't that simple. What $! does is force its arguments into WHNF before applying the function. WHNF means, roughly, either a lambda or a constructor at the top-level. In terms of your list (ids) you are forcing it to either (:) or [] at the top level (the two list constructors). So you force the 'top layer' of the list; you check if it's empty or not. If you want to force the whole spine of the list (that's the shape but not the values) then (length ids) `seq` return () would do that. However that's a bit clumsy. What kind of error are you seeing when you say 'it crashes'? It looks to me like your program creates a lazily generated list in the DB monad which looks superficially like a sensible thing to do. Jules