@@ -30,16 +30,32 @@ data TBPointer = MkTBPointer Ptr
30-- Statement pointer
30-- Statement pointer
31data StmtPtr = MkStmtPtr Ptr
31data StmtPtr = MkStmtPtr Ptr
33−Table : Set
33+Table : Type
34Table = List (List DBVal)
34Table = List (List DBVal)
36-- ForMap used in to_list_v1
36-- ForMap used in to_list_v1
37−forM : Monad m => List a -> (a -> m b) -> m (List b)
37+forM : Applicative f => List a -> (a -> f b) -> f (List b)
38−forM f xs = mapM xs f
38+forM xs f = (sequence (map f xs))
40-- Neater error handling done using DB
40-- Neater error handling done using DB
41data DB a = MkDB (IO (Either String a))
41data DB a = MkDB (IO (Either String a))
43+instance Functor DB where
44+ fmap f (MkDB action) = MkDB (do res <- action
46+ Left x => return (Left x)
47+ Right x => return (Right (f x)))
49+instance Applicative DB where
50+ pure = MkDB . return . Right
51+ (MkDB f) <$> (MkDB x) = MkDB (do f' <- f -- FIXME make pretty
53+ Left err => return (Left err)
54+ Right op => do x' <- x
56+ Left err => return (Left err)
57+ Right v => return (Right (op v)))
43instance Monad DB where
59instance Monad DB where
44 (MkDB l) >>= k = MkDB (do c <- l
60 (MkDB l) >>= k = MkDB (do c <- l
@@ -299,20 +315,16 @@ get_data (MkDBPointer pointer) row col = do
299-----------------------------------------------------------------------------
315-----------------------------------------------------------------------------
301toList_v1 : DBPointer -> DB Table
317toList_v1 : DBPointer -> DB Table
303− nbR <- liftIO (num_row_v2 db)
318+toList_v1 db = do nbR <- liftIO (num_row_v2 db)
304− nmC <- liftIO (num_col_v2 db)
319+ nmC <- liftIO (num_col_v2 db)
305− res <- forM [0..(nbR-1)] (\ i =>
321+ res <- liftIO $ forM [0..(nbR-1)] (\ i =>
306− forM [0..(nmC-1)] (\ j =>
322+ forM [0..(nmC-1)] (\ j => get_data db i j)
307− liftIO(get_data db i j)
311− return res
324+ return (the (List (List DBVal)) res)
314strcat : String -> String-> String
326strcat : String -> String-> String
315−strcat str1 str2 = (str1 ++ str2)
327+strcat str1 str2 = (str1 ++ str2)
317-----------------------------------------------------------------------------
329-----------------------------------------------------------------------------
318-- | This version of toList retunrs result from get_table
330-- | This version of toList retunrs result from get_table