From c646c467c9ad14b32686c2572b4bddf1c6a9cf9e Mon Sep 17 00:00:00 2001 From: Andrew Martin Date: Sat, 25 Feb 2017 14:08:49 -0500 Subject: [PATCH] add more functions for tweaking headedness --- colonnade/src/Colonnade.hs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/colonnade/src/Colonnade.hs b/colonnade/src/Colonnade.hs index a555ad8..fa898f2 100644 --- a/colonnade/src/Colonnade.hs +++ b/colonnade/src/Colonnade.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DataKinds #-} +{-# LANGUAGE RankNTypes #-} {-# OPTIONS_GHC -Wall -fno-warn-unused-imports -fno-warn-unticked-promoted-constructors -Werror #-} @@ -16,12 +17,16 @@ module Colonnade , headless , singleton -- * Transform - , mapHeaderContent + -- ** Body , fromMaybe , columns , bool , replaceWhen , modifyWhen + -- ** Header + , mapHeaderContent + , mapHeadedness + , toHeadless -- * Cornice -- ** Types , Cornice @@ -118,6 +123,16 @@ mapHeaderContent :: Functor h => (c -> c) -> Colonnade h a c -> Colonnade h a c mapHeaderContent f (E.Colonnade v) = E.Colonnade (Vector.map (\(E.OneColonnade h e) -> E.OneColonnade (fmap f h) e) v) +-- | Map over the header type of a 'Colonnade'. +mapHeadedness :: (forall x. h x -> h' x) -> Colonnade h a c -> Colonnade h' a c +mapHeadedness f (E.Colonnade v) = + E.Colonnade (Vector.map (\(E.OneColonnade h e) -> E.OneColonnade (f h) e) v) + +-- | Remove the heading from a 'Colonnade'. +toHeadless :: Colonnade h a c -> Colonnade Headless a c +toHeadless = mapHeadedness (const Headless) + + -- | Lift a column over a 'Maybe'. For example, if some people -- have houses and some do not, the data that pairs them together -- could be represented as: