Marc Weber wrote:
1)
Is using mapM the best choice?
Haskell has sequence or sequence_
Anyway: No inserts take place. What am I doing wrong?
fun speed_test_insert () =
let
val numbers = Enum.to 1 10
in
dml (DELETE FROM st WHERE 1 = 1);
list<- (List.mapM (fn i => dml (INSERT INTO st (Id, A, B, C) VALUES ({[i]}, {["TEXT A"]},
{["TEXT B"]}, {["TEXT C"]}) ) ) numbers);
return (page "refreshed"<xml>{[show numbers]}</xml>)
end
I think [List.app] is the better choice.
I don't see any obvious problem in the above that would lead to no rows
being inserted, but I don't know which code for [Enum.to] you have in
mind. I'd guess there's a bug where it's returning an empty list.
BTW, you could write [TRUE] instead of [1 = 1]. IMO, it's slightly
nicer looking.
2)
Tree demo:
A witness that key belongs to the type class sql_injectable_prim,
which indicates that both key and option key are fair game to use with
SQL
What does this exactly mean?
[sql_injectable] is an abstract type family. This means that its
definition is not exposed by its containing module, [Basis]. Thus,
values in this type family can only be built using combinators exposed
by [Basis]. There is a value for building [sql_injectable int], but it
is impossible to construct a value of type [sql_injectable (int -> int)].
That behavior is appropriate because [sql_injectable] is meant as a type
of proofs that particular types are understood by the SQL engine.
Haskell type classes are always open, where any module may add new
instances. The [sql_injectable] class in Ur/Web is closed, which makes
it suitable as a type of proofs with a fixed meaning. While the
dictionary-passing implementation of type classes is only implicit in
Haskell, it is explicit in Ur, so that [sql_injectable] values may
either be passed manually or found automatically by type class resolution.
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur