dsv-1.0.0.0: library/DSV/VectorViews.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DSV.VectorViews
( columnNumberView, lookupView
, columnNumberView_, lookupView_
) where
import DSV.IndexError
import DSV.LookupError
import DSV.Numbers
import DSV.Position
import DSV.Prelude
import DSV.Validation
import DSV.Vector
import DSV.ViewType
columnNumberView :: forall a.
ColumnNumber -> View TooShort (Vector a) a
columnNumberView (ColumnNumber n) =
View $ \xs ->
case vectorIndexInt xs (positiveInt n - 1) of
Nothing -> Failure TooShort
Just x -> Success x
columnNumberView_ :: forall a.
ColumnNumber -> View () (Vector a) a
columnNumberView_ x = discardViewError (columnNumberView x)
lookupView ::
(a -> Bool)
-> View LookupError (Vector (a, b)) b
lookupView f =
View $ \xs ->
case filter (\(n, _) -> f n) (toList xs) of
[] -> Failure LookupError_Missing
[(_, v)] -> Success v
_ -> Failure LookupError_Duplicate
lookupView_ ::
(a -> Bool)
-> View () (Vector (a, b)) b
lookupView_ x = discardViewError (lookupView x)