packages feed

hledger-lib-1.40: Hledger/Write/Spreadsheet.hs

{- |
Rich data type to describe data in a table.
This is the basis for ODS and HTML export.
-}
module Hledger.Write.Spreadsheet (
    Type(..),
    Style(..),
    Emphasis(..),
    Cell(..),
    defaultCell,
    emptyCell,
    ) where

import Hledger.Data.Types (Amount)


data Type =
      TypeString
    | TypeAmount !Amount
    | TypeMixedAmount
    | TypeDate
    deriving (Eq, Ord, Show)

data Style = Body Emphasis | Head
    deriving (Eq, Ord, Show)

data Emphasis = Item | Total
    deriving (Eq, Ord, Show)

data Cell text =
    Cell {
        cellType :: Type,
        cellStyle :: Style,
        cellContent :: text
    }

instance Functor Cell where
    fmap f (Cell typ style content) = Cell typ style $ f content

defaultCell :: text -> Cell text
defaultCell text =
    Cell {
        cellType = TypeString,
        cellStyle = Body Item,
        cellContent = text
    }

emptyCell :: (Monoid text) => Cell text
emptyCell = defaultCell mempty