<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:large">i have this function:</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">-- this function will return th N°BD from Sidonie for a given name<br>-- note: names have been standardized between Sidonie and WDS<br>getBD :: Connection -> String -> IO Float<br>getBD conn name = trace "Entering getBD" noBDfp<br>  where qry_head = "select `N° BD` from Coordonnées where Nom = ?" :: Query<br>        bd_rows :: IO [Only Text]<br>        bd_rows = query conn qry_head (Only (name::String))<br>--        noBDtxt :: [Text]<br>--        noBDtxt = fromOnly (Prelude.head bd_rows)<br>--        noBDtxt :: IO [Text]<br>--        lg = fmap Prelude.length bd_rows<br>--        lg2 = fmap show lg<br>        noBDtxt :: IO Text<br>--        noBDtxt = trace "lg " (fmap (fromOnly . Prelude.head) bd_rows)<br>        noBDtxt = trace "assigning noBDtxt" (fmap (fromOnly . Prelude.head) bd_rows)<br>--        noBDstr :: String<br>--        noBDstr = Text.unpack noBDtxt<br>        noBDstr :: IO String<br>        noBDstr = trace "assigning noBDstr" (fmap Text.unpack noBDtxt)<br>--        noBDfp = read $ noBDstr :: Float<br>        noBDfp :: IO Float<br>        noBDfp = fmap read noBDstr</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">call by :</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">let lstBD = Prelude.map (\elem -><br>                                  getBD conn (Text.unpack (fst elem)))<br>                            rows</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">it works ok, in fact at some point it fails due to NULL sql value not again handle correctly , i have inserted trace statement that output variable, i understand it's not really good becaus it breaks the purity of haskell function, perheaps for this reason i have strange behavior of output:</div><div class="gmail_default" style="font-size:large">...<br></div><div class="gmail_default" style="font-size:large">Entering getBD<br>assigning noBDstr<br>assigning noBDtxt<br>Entering getBD<br>assigning noBDstr<br>assigning noBDtxt<br>Entering getBD<br>assigning noBDstr<br>assigning noBDtxt<br>*** Exception: UnexpectedNull {errSQLType = "VarString", errHaskellType = "Text", errFieldName = "N\194\176 BD", errMessage = "unexpected null in table Coordonn\195\169es of database sidonie"}<br>*Main> <br></div><div class="gmail_default" style="font-size:large">you will notice noBDstr seems to be assigned before noBDtxt, but in the code i have the statements in this order:</div><div class="gmail_default" style="font-size:large">        noBDtxt = trace "assigning noBDtxt" (fmap (fromOnly . Prelude.head) bd_rows)<br>        noBDstr :: IO String<br>        noBDstr = trace "assigning noBDstr" (fmap Text.unpack noBDtxt)</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">i just want to understand wht's happening, this is not critical for code as it works...</div><div class="gmail_default" style="font-size:large">any idea?</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Damien<br></div></div></div></div></div>