hs-excelx 0.5.2.1 → 0.6.0.0
raw patch · 2 files changed
+18/−14 lines, 2 files
Files
- hs-excelx.cabal +1/−1
- src/Data/Excelx.hs +17/−13
hs-excelx.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: hs-excelx-version: 0.5.2.1+version: 0.6.0.0 synopsis: HS-Excelx provides basic read-only access to Excel 2007 and 2010 documents in XLSX format. -- description: license: BSD3
src/Data/Excelx.hs view
@@ -174,42 +174,46 @@ type Sheet = (Excelx, Cursor) type Row = [Cell]+type ExcelReader a = ReaderT (Excelx, Cursor) Maybe a -sheet :: MonadReader Excelx m => T.Text -> m (Maybe Sheet)+sheet :: MonadReader Excelx m => T.Text -> m (Maybe (Excelx, Cursor)) sheet name = do xlsx <- ask let sheetx = extractSheet name xlsx return $ fmap (\sheetxml -> (xlsx, sheetxml)) sheetx -row :: MonadReader Sheet m => Int -> m Row+row :: MonadReader (Excelx, Cursor) m => Int -> m [Cell] row num = do (xlsx, sheetx) <- ask return $ parseRow xlsx sheetx num -rows :: MonadReader Sheet m => m [Row]+rows :: MonadReader (Excelx, Cursor) m => m [Row] rows = do (_, sheetx) <- ask mapM row [1 .. maxRow sheetx] -cell :: MonadReader Sheet m => Position -> m (Cell) +cell :: MonadReader (Excelx, Cursor) m => Position -> m Cell cell cellpos = do (xlsx, sheetx) <- ask return $ parseCell xlsx sheetx cellpos -column :: MonadReader Sheet m => Int -> m [Cell]-column colidx = do+sparseColumn :: MonadReader (Excelx, Cursor) m => Int -> m [Cell]+sparseColumn colidx = do (_, sheetx) <- ask- liftM catCells $ mapM cell $ map (flip R1C1 colidx) [1 .. maxRow sheetx]+ mapM cell $ map (flip R1C1 colidx) [1 .. maxRow sheetx] -inExcel :: b -> Reader b c -> c-inExcel = flip runReader+column :: MonadReader (Excelx, Cursor) m => Int -> m [Cell]+column colidx = liftM catCells (sparseColumn colidx) -inSheet :: MonadReader Excelx m => T.Text -> Reader Sheet a -> m (Maybe a)+inExcel :: b -> ReaderT b m a -> m a+inExcel = flip runReaderT++inSheet :: MonadReader Excelx m => T.Text -> ReaderT (Excelx, Cursor) m b -> m b inSheet name action = do maybeSheet <- sheet name case maybeSheet of- Just sheetx -> return $ Just $ runReader action sheetx- Nothing -> return Nothing+ Just sheetx -> runReaderT action sheetx+ Nothing -> fail "Sheet not found." -inExcelSheet :: Excelx -> T.Text -> Reader Sheet a -> Maybe a+inExcelSheet :: Monad m => Excelx -> T.Text -> ReaderT (Excelx, Cursor) (ReaderT Excelx m) a -> m a inExcelSheet xlsx name action = inExcel xlsx $ inSheet name action