Seph Shewell Brockway
2018-12-10 16:19:39 UTC
Hi Damien,
body of the definition. You would need to do something like
getBD :: Connection -> String -> IO Float
getBD = do rows <- bd_rows
{- code that does something with the returned data -}
Note the change to the type signature—querying the database is an IO
action, and therefore takes place in the IO monad.
Incidently, your use of do notation in the definition of bd_rows is
unnecessary:
do x <- doSomething
return x
is actually syntactic sugar for
doSomething >>= \x -> return x
which the monad laws state is equivalent to just doSomething. This is a
common misapprehension among Haskell novices: the do notation is just a
syntactic convenience, and it is perfectly possible to write monadic
functions, including in the IO monad, without it.
Hope at least some of this helps.
Seph
have some code that works but want to put it in a simple function
getBD :: Connection -> String -> Float
getBD conn name = noBDfp
where qry_head = "select `N° BD` from sidonie.Coordonnées where Nom =
?" :: Query
bd_rows = do
local_bd_rows <- query conn qry_head (Only (name::String))
return local_bd_rows
i want the variable local_bd_rows accessible in the 'where' clause
how can i do that?
You don’t seem to be using the function bd_rows anywhere in the maingetBD :: Connection -> String -> Float
getBD conn name = noBDfp
where qry_head = "select `N° BD` from sidonie.Coordonnées where Nom =
?" :: Query
bd_rows = do
local_bd_rows <- query conn qry_head (Only (name::String))
return local_bd_rows
i want the variable local_bd_rows accessible in the 'where' clause
how can i do that?
body of the definition. You would need to do something like
getBD :: Connection -> String -> IO Float
getBD = do rows <- bd_rows
{- code that does something with the returned data -}
Note the change to the type signature—querying the database is an IO
action, and therefore takes place in the IO monad.
Incidently, your use of do notation in the definition of bd_rows is
unnecessary:
do x <- doSomething
return x
is actually syntactic sugar for
doSomething >>= \x -> return x
which the monad laws state is equivalent to just doSomething. This is a
common misapprehension among Haskell novices: the do notation is just a
syntactic convenience, and it is perfectly possible to write monadic
functions, including in the IO monad, without it.
Hope at least some of this helps.
Seph
--
Seph Shewell Brockway, BSc MSc (Glas.)
Seph Shewell Brockway, BSc MSc (Glas.)