haskcell-lib-0.2.1.1

Safe HaskellNone
LanguageHaskell2010

Data.SpreadSheet.Cell

Contents

Description

Este módulo permita una utilización más convencional de las hojas de cálculo. Ofrece el tipo de datos necesario para poder tener valores heterogéneos (de distinto tipo) sobre cada celda.

Synopsis

Documentation

data Cell Source #

El tipo de dato Cell es la suma de los tipos Double, String, Day y Bool. Además, se añade el valor Blank para poder explicitar celdas vacías. Las hojas de cálculo que se crearían serían del tipo SpreadSheet Cell.

Si queremos trabajar con los valores básicos de cada celda se puede definir una función sobre el dominio de Cell o bien extraer el propio valor. Para hacer esto último se ofrece la familia de funciones extract, como por ejemplo extractDouble. Estas funciones generarían una hoja de cálculo homogenea con solo las celdas que sean del tipo correspondiente. (Ejemplos en la definición de estas funciones).

Se ofrecen también las funciones para generar tipos complejos de datos a partir de conjuntos de celdas con la clase ComplexCell y las funciones toCell y fromCells.

Constructors

CNumber Double 
CString String 
CDay Day

Se ofrece el módulo Date con ciertas funciones para facilitar operaciones con fechas.

CBool Bool 
Blank 
Instances
Eq Cell Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Methods

(==) :: Cell -> Cell -> Bool #

(/=) :: Cell -> Cell -> Bool #

Read Cell Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Show Cell Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Methods

showsPrec :: Int -> Cell -> ShowS #

show :: Cell -> String #

showList :: [Cell] -> ShowS #

Arbitrary Cell

Distribuye de forma equitativa la generación de valores: - CNumber - CString - CBool - CDay

Instance details

Defined in Data.SpreadSheet.Internal.Gen

Methods

arbitrary :: Gen Cell

shrink :: Cell -> [Cell]

Celldable Cell Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Methods

blank :: Cell Source #

Show (SpreadSheet Cell) Source #

Cell instancia la clase Celldable y utiliza la función 'Data.SpreadSheet.Internal.Pretty.prettyShowSpreadSheet para hacer su representación.

Instance details

Defined in Data.SpreadSheet.Cell

putCell :: CCell a => Pos -> (SpreadSheet Cell -> a) -> SpreadSheet Cell -> SpreadSheet Cell Source #

Se restringe la función put para solo valores de Cell. Además, permite incluir directamente funciones de SpreadSheet Cell -> a siempre que a pueda ser un valor en Cell.

>>> put (1,1) (const $ CString "valor") empty
Range (1,1) (1,1)
┌         ┐
│ "valor" │
└         ┘
>>> putCell (1,1) (const "valor") empty
Range (1,1) (1,1)
┌         ┐
│ "valor" │
└         ┘
>>> let cells = fromList [((1,1), CBool True), ((1,2), CBool False)]
>>> put (2,1) (CNumber . fromIntegral . length) (column 1 cells)
┌             ┐
│  True   2.0 │
│ False     ■ │
└             ┘
>>> putCell (2,1) (fromIntegral . length) (column 1 cells)
Range (1,1) (2,2)
┌             ┐
│  True   2.0 │
│ False     ■ │
└             ┘

Extracción

La funciones extractDouble, extractString, extractDay y extractBool pertenecen a la misma familia de funciones que toman una hoja de cálculo de Cell y devuelven una nueva hoja con solo los valores deseados.

extractDouble :: SpreadSheet Cell -> SpreadSheet Double Source #

Genera una hoja de cálculo con solo los valores Double

extractString :: SpreadSheet Cell -> SpreadSheet String Source #

Genera una hoja de cálculo con solo los valores String

extractDay :: SpreadSheet Cell -> SpreadSheet Day Source #

Genera una hoja de cálculo con solo los valores Day

extractBool :: SpreadSheet Cell -> SpreadSheet Bool Source #

Genera una hoja de cálculo con solo los valores Bool

Tipos complejos

class CompositeCell a where Source #

Conjuntos de celdas se pueden representar atributos de otros datos compuestos. Mediante la implementación de esta clase se ofrecen herramientas para componer y descomponer conjuntos de datos.

Minimal complete definition

size, buildCell, buildComposite

Methods

size :: a -> Natural Source #

El númmero de celdas necesarias para representar un dato a puede variar, por eso siempre se toma como parámetro para indicar el tamaño.

data Localización = Coordenada { lat :: Double, lon :: Double }
                  | Dirección { calle :: String, número :: Int,
                                ciudad :: String
                              }

Para el caso de una Localización podríamos tener distintas formas de representarla, y por tanto, varios tamaños.

>>> size $ Coordenada 40.404823 -3.839532
2
>>> size $ Dirección "Avd. de los Ciruelos" 0 "Boadilla del Monte"
3

buildCell :: a -> [Cell] Source #

buildComposite :: [Cell] -> Maybe a Source #

data Align Source #

Para la construcción de tipos complejos es necesario indicar la orientación de datos.

Si por ejemplo se desea constuir un tipo complejo como es Expense:

data Expense = { concepto :: String, coste :: Double, fecha :: Day }

Los datos pueden estar dispuestos de dos formas diferentes:

1 Horizontal:

┌                                  ┐
│ "Concepto"    "Coste"    "Fecha" │
│     "Agua"        1.0 2018-10-10 │
│     "Zumo"        2.0 2018-10-10 │
└                                  ┘

2 Vertical:

┌                                  ┐
│ "Concepto"     "Agua"     "Zumo" │
│ "Coste"           1.0        2.0 │
│ "Fecha"    2018-10-10 2018-10-10 │
└                                  ┘

Constructors

Horizontal 
Vertical 
Instances
Eq Align Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Methods

(==) :: Align -> Align -> Bool #

(/=) :: Align -> Align -> Bool #

Show Align Source # 
Instance details

Defined in Data.SpreadSheet.Cell

Methods

showsPrec :: Int -> Align -> ShowS #

show :: Align -> String #

showList :: [Align] -> ShowS #

toCellAlign :: CompositeCell a => Align -> Pos -> [a] -> SpreadSheet Cell Source #

Transforma un dato complejo a un conjunto de celdas. La orientación se representa como en Align.

Es necesario que estos datos implementen la clase CompositeCell

fromCellAlign :: CompositeCell a => Align -> SpreadSheet Cell -> [Maybe a] Source #

Obtiene posibles datos complejos de un conjunto de celdas.