table t1 : {A : int, B : string, C : float, D : bool}

fun display (q : sql_query [T1 = [A = int, B = string, C = float, D = bool]] []) =
        s <- query q
                (fn fs _ => return (Some fs.T1))
                None;
        return <html><body>
                {case s of
                  None => cdata "Row not found."
                | Some s =>
                        <body>
                                A: {cdata (show _ s.A)}<br/>
                                B: {cdata (show _ s.B)}<br/>
                                C: {cdata (show _ s.C)}<br/>
                                D: {cdata (show _ s.D)}<br/>
                        </body>}
        </body></html>

fun lookupA (inp : {A : string}) =
        display (SELECT * FROM t1 WHERE t1.A = {readError _ inp.A})

fun lookupB (inp : {B : string}) =
        display (SELECT * FROM t1 WHERE t1.B = {inp.B})

fun lookupC (inp : {C : string}) =
        display (SELECT * FROM t1 WHERE t1.C = {readError _ inp.C})

fun lookupD (inp : {D : string}) =
        display (SELECT * FROM t1 WHERE t1.D = {readError _ inp.D})

fun main () : transaction page = return <html><body>
        <lform>
                A: <textbox{#A}/>
                <submit action={lookupA}/>
        </lform>

        <lform>
                B: <textbox{#B}/>
                <submit action={lookupB}/>
        </lform>

        <lform>
                C: <textbox{#C}/>
                <submit action={lookupC}/>
        </lform>

        <lform>
                D: <textbox{#D}/>
                <submit action={lookupD}/>
        </lform>
</body></html>