lhae-0.0.2: src/Model/CellExpression/Evaluator/Common.hs
module Model.CellExpression.Evaluator.Common
(withNum,withString,withList,withNumList,getNumList,fLength)
where
import Model.CellContent (CellValue (..),RuntimeReason(..))
withNum :: CellValue -> (Double -> CellValue) -> CellValue
withNum value f =
case value of NumberValue a -> f a
Error a -> Error $ Inherited value a
a -> Error $ TypeError a
withString :: CellValue -> (String -> CellValue) -> CellValue
withString value f =
case value of StringValue a -> f a
Error a -> Error $ Inherited value a
a -> Error $ TypeError a
withList :: CellValue -> ([CellValue] -> CellValue) -> CellValue
withList value f =
case value of ListValue a -> f a
Error a -> Error $ Inherited value a
a -> Error $ TypeError a
withNumList :: CellValue -> ([Double] -> CellValue) -> CellValue
withNumList value f =
case value of
ListValue a -> either (Error . Inherited value) f $ getNumList a
Error a -> Error $ Inherited value a
a -> Error $ TypeError a
getNumList :: [CellValue] -> Either RuntimeReason [Double]
getNumList =
foldr (\value accu ->
case (value,accu) of
(NumberValue n,Right list) -> Right $ n:list
(Error a,Right _) -> Left $ Inherited value a
(a,Right _) -> Left $ TypeError a
(_,Left a) -> Left a
) (Right [])
fLength :: Num b => [a] -> b
fLength = fromIntegral . length