
Hi, instead of writing a function getTransaction that retrieves the connection you could write a function withConnection that doesn't return the connection itself but performs an operation on the connection: withConnection :: (forall c. Connection c => c -> Transaction a) -> Transaction a withConnection f = Transaction (\t@(TransactionT c) -> let Transaction tf = f c in tf t) Then execute becomes: execute :: String -> Transaction () execute s = withConnection (\c -> connectionExecute c s) Regards, Martin.
getConnection :: Transaction c getConnection = Transaction (\t@(TransactionT c) -> (c, t))
class Connection c where connectionExecute :: c -> String -> Transaction ()
execute :: String -> Transaction () execute s = connectionExecute getConnection s