From 7664200075955eafc39ad048e41ff98947e31030 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sat, 17 Dec 2005 15:57:55 -0800 Subject: [PATCH] Generalized types of the connection functions in the HSQL backends to use MonadIO. darcs-hash:20051217235755-6cdb2-e9ca6acdfb005e9cd75425a925b590bbf54f60ad.gz --- src/Database/HaskellDB/HSQL/Common.hs | 12 +++++++----- src/Database/HaskellDB/HSQL/MySQL.hs | 2 +- src/Database/HaskellDB/HSQL/ODBC.hs | 2 +- src/Database/HaskellDB/HSQL/PostgreSQL.hs | 2 +- src/Database/HaskellDB/HSQL/SQLite.hs | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Database/HaskellDB/HSQL/Common.hs b/src/Database/HaskellDB/HSQL/Common.hs index 315d404..b49b085 100644 --- a/src/Database/HaskellDB/HSQL/Common.hs +++ b/src/Database/HaskellDB/HSQL/Common.hs @@ -14,12 +14,14 @@ ----------------------------------------------------------- module Database.HaskellDB.HSQL.Common ( - hsqlConnect + hsqlConnect, MonadIO ) where import Data.Maybe import Control.Exception (catch, throwIO) import Control.Monad +import Control.Monad.Trans (MonadIO, liftIO) +import System.IO import System.IO.Unsafe (unsafeInterleaveIO) import System.Time @@ -33,13 +35,13 @@ import Database.HaskellDB.FieldType import Database.HSQL as HSQL -- | Run an action on a HSQL Connection and close the connection. -hsqlConnect :: (opts -> IO Connection) -- ^ HSQL connection function, e.g. - -> opts -> (Database -> IO a) -> IO a +hsqlConnect :: MonadIO m => (opts -> IO Connection) -- ^ HSQL connection function + -> opts -> (Database -> m a) -> m a hsqlConnect connect opts action = do - conn <- handleSqlError (connect opts) + conn <- liftIO $ handleSqlError (connect opts) x <- action (mkDatabase conn) - handleSqlError (disconnect conn) + liftIO $ handleSqlError (disconnect conn) return x handleSqlError :: IO a -> IO a diff --git a/src/Database/HaskellDB/HSQL/MySQL.hs b/src/Database/HaskellDB/HSQL/MySQL.hs index a928e46..e56317a 100644 --- a/src/Database/HaskellDB/HSQL/MySQL.hs +++ b/src/Database/HaskellDB/HSQL/MySQL.hs @@ -30,7 +30,7 @@ data MySQLOptions = MySQLOptions { pwd :: String -- ^ password } -mysqlConnect :: MySQLOptions -> (Database -> IO a) -> IO a +mysqlConnect :: MonadIO m => MySQLOptions -> (Database -> m a) -> m a mysqlConnect = hsqlConnect (\opts -> MySQL.connect (server opts) (db opts) (uid opts) (pwd opts)) diff --git a/src/Database/HaskellDB/HSQL/ODBC.hs b/src/Database/HaskellDB/HSQL/ODBC.hs index cc35d52..061cc55 100644 --- a/src/Database/HaskellDB/HSQL/ODBC.hs +++ b/src/Database/HaskellDB/HSQL/ODBC.hs @@ -30,7 +30,7 @@ data ODBCOptions = ODBCOptions { pwd :: String -- ^ password } -odbcConnect :: ODBCOptions -> (Database -> IO a) -> IO a +odbcConnect :: MonadIO m => ODBCOptions -> (Database -> m a) -> m a odbcConnect = hsqlConnect (\opts -> ODBC.connect (dsn opts) (uid opts) (pwd opts)) diff --git a/src/Database/HaskellDB/HSQL/PostgreSQL.hs b/src/Database/HaskellDB/HSQL/PostgreSQL.hs index c0467a5..e092afc 100644 --- a/src/Database/HaskellDB/HSQL/PostgreSQL.hs +++ b/src/Database/HaskellDB/HSQL/PostgreSQL.hs @@ -30,7 +30,7 @@ data PostgreSQLOptions = PostgreSQLOptions { pwd :: String -- ^ password } -postgresqlConnect :: PostgreSQLOptions -> (Database -> IO a) -> IO a +postgresqlConnect :: MonadIO m => PostgreSQLOptions -> (Database -> m a) -> m a postgresqlConnect = hsqlConnect (\opts -> PostgreSQL.connect (server opts) (db opts) (uid opts) (pwd opts)) diff --git a/src/Database/HaskellDB/HSQL/SQLite.hs b/src/Database/HaskellDB/HSQL/SQLite.hs index dd3cc8b..31dcdaf 100644 --- a/src/Database/HaskellDB/HSQL/SQLite.hs +++ b/src/Database/HaskellDB/HSQL/SQLite.hs @@ -31,7 +31,7 @@ data SQLiteOptions = SQLiteOptions { mode :: IOMode -- ^ access mode } -sqliteConnect :: SQLiteOptions -> (Database -> IO a) -> IO a +sqliteConnect :: MonadIO m => SQLiteOptions -> (Database -> m a) -> m a sqliteConnect = hsqlConnect (\opts -> SQLite.connect (filepath opts) (mode opts))