colonnade 0.4 → 0.4.1
raw patch · 3 files changed
+37/−5 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Colonnade.Types: [DecodingAp] :: !(f content) -> !(content -> Either String a) -> !(Decoding f content (a -> b)) -> Decoding f content b
- Colonnade.Types: [DecodingPure] :: !a -> Decoding f content a
+ Colonnade.Encoding: runHeaderMonadic_ :: (Monad m) => Encoding Headed content a -> (content -> m b) -> m ()
+ Colonnade.Encoding: runRowMonadicWith :: (Monad m) => b -> (b -> b -> b) -> Encoding f content a -> (content -> m b) -> a -> m b
+ Colonnade.Internal: foldMapM :: (Foldable t, Monoid b, Monad m) => (a -> m b) -> t a -> m b
+ Colonnade.Types: DecodingAp :: !(f content) -> !(content -> Either String a) -> !(Decoding f content (a -> b)) -> Decoding f content b
+ Colonnade.Types: DecodingPure :: !a -> Decoding f content a
- Colonnade.Decoding: contramapContent :: forall c1 c2 f a. Contravariant f => (c2 -> c1) -> Decoding f c1 a -> Decoding f c2 a
+ Colonnade.Decoding: contramapContent :: Contravariant f => (c2 -> c1) -> Decoding f c1 a -> Decoding f c2 a
- Colonnade.Decoding: headedToIndexed :: forall content a. Eq content => Vector content -> Decoding Headed content a -> Either (HeadingErrors content) (Decoding (Indexed Headed) content a)
+ Colonnade.Decoding: headedToIndexed :: Eq content => Vector content -> Decoding Headed content a -> Either (HeadingErrors content) (Decoding (Indexed Headed) content a)
- Colonnade.Decoding: headlessToIndexed :: forall c a. Decoding Headless c a -> Decoding (Indexed Headless) c a
+ Colonnade.Decoding: headlessToIndexed :: Decoding Headless c a -> Decoding (Indexed Headless) c a
- Colonnade.Decoding: length :: forall f c a. Decoding f c a -> Int
+ Colonnade.Decoding: length :: Decoding f c a -> Int
- Colonnade.Decoding: maxIndex :: forall f c a. Decoding (Indexed f) c a -> Int
+ Colonnade.Decoding: maxIndex :: Decoding (Indexed f) c a -> Int
- Colonnade.Decoding: uncheckedRun :: forall content a f. Decoding (Indexed f) content a -> Vector content -> Either (DecodingCellErrors f content) a
+ Colonnade.Decoding: uncheckedRun :: Decoding (Indexed f) content a -> Vector content -> Either (DecodingCellErrors f content) a
Files
- colonnade.cabal +1/−1
- src/Colonnade/Encoding.hs +30/−4
- src/Colonnade/Internal.hs +6/−0
colonnade.cabal view
@@ -1,5 +1,5 @@ name: colonnade-version: 0.4+version: 0.4.1 synopsis: Generic types and functions for columnar encoding and decoding description: Please see README.md homepage: https://github.com/andrewthad/colonnade#readme
src/Colonnade/Encoding.hs view
@@ -2,7 +2,9 @@ import Colonnade.Types import Data.Vector (Vector)+import Data.Foldable import qualified Data.Vector as Vector+import qualified Colonnade.Internal as Internal mapContent :: Functor f => (c1 -> c2) -> Encoding f c1 a -> Encoding f c2 a mapContent f (Encoding v) = Encoding@@ -29,10 +31,25 @@ -> (content -> m b) -> a -> m b-runRowMonadic (Encoding v) g a = fmap (mconcat . Vector.toList) - $ Vector.forM v +runRowMonadic (Encoding v) g a =+ -- fmap (mconcat . Vector.toList)+ -- $ Vector.forM v+ flip Internal.foldMapM v $ \e -> g (oneEncodingEncode e a) +runRowMonadicWith :: (Monad m)+ => b+ -> (b -> b -> b)+ -> Encoding f content a+ -> (content -> m b)+ -> a+ -> m b+runRowMonadicWith bempty bappend (Encoding v) g a =+ foldrM (\e br -> do+ bl <- g (oneEncodingEncode e a)+ return (bappend bl br)+ ) bempty v+ runHeader :: (c1 -> c2) -> Encoding Headed c1 a -> Vector c2 runHeader g (Encoding v) = Vector.map (g . getHeaded . oneEncodingHead) v@@ -44,14 +61,23 @@ runHeaderMonadic (Encoding v) g = fmap (mconcat . Vector.toList) $ Vector.mapM (g . getHeaded . oneEncodingHead) v +runHeaderMonadic_ ::+ (Monad m)+ => Encoding Headed content a+ -> (content -> m b)+ -> m ()+runHeaderMonadic_ (Encoding v) g = Vector.mapM_ (g . getHeaded . oneEncodingHead) v+ fromMaybe :: c -> Encoding f c a -> Encoding f c (Maybe a) fromMaybe c (Encoding v) = Encoding $ flip Vector.map v $ \(OneEncoding h encode) -> OneEncoding h (maybe c encode) columns :: (b -> a -> c)- -> (b -> f c) - -> Vector b + -> (b -> f c)+ -> Vector b -> Encoding f c a columns getCell getHeader bs = Encoding $ Vector.map (\b -> OneEncoding (getHeader b) (getCell b)) bs++
src/Colonnade/Internal.hs view
@@ -1,6 +1,8 @@ {-# LANGUAGE DeriveFunctor #-} module Colonnade.Internal where +import Data.Foldable (foldrM)+ newtype EitherWrap a b = EitherWrap { getEitherWrap :: Either a b } deriving (Functor)@@ -15,3 +17,7 @@ mapLeft :: (a -> b) -> Either a c -> Either b c mapLeft _ (Right a) = Right a mapLeft f (Left a) = Left (f a)++foldMapM :: (Foldable t, Monoid b, Monad m) => (a -> m b) -> t a -> m b+foldMapM f = foldrM (\a b -> fmap (flip mappend b) (f a)) mempty+