Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- data Cell
- putCell :: CCell a => Pos -> (SpreadSheet Cell -> a) -> SpreadSheet Cell -> SpreadSheet Cell
- extractDouble :: SpreadSheet Cell -> SpreadSheet Double
- extractString :: SpreadSheet Cell -> SpreadSheet String
- extractDay :: SpreadSheet Cell -> SpreadSheet Day
- extractBool :: SpreadSheet Cell -> SpreadSheet Bool
- class CompositeCell a where
- data Align
- toCellAlign :: CompositeCell a => Align -> Pos -> [a] -> SpreadSheet Cell
- fromCellAlign :: CompositeCell a => Align -> SpreadSheet Cell -> [Maybe a]
Documentation
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
.
CNumber Double | |
CString String | |
CDay Day | Se ofrece el módulo
|
CBool Bool | |
Blank |
Instances
Eq Cell Source # | |
Read Cell Source # | |
Show Cell Source # | |
Arbitrary Cell | Distribuye de forma equitativa la generación de valores:
- |
Celldable Cell Source # | |
Defined in Data.SpreadSheet.Cell | |
Show (SpreadSheet Cell) Source # |
|
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.
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 #
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 │ └ ┘
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.