app-lens-0.1.0.0: Control/LensFunction/Util.hs
{-# LANGUAGE Trustworthy #-}
module Control.LensFunction.Util where
import Data.Traversable (Traversable)
import qualified Data.Traversable as T
import qualified Data.Foldable as F
import qualified Control.Monad.State as St
contents :: Traversable t => t a -> [a]
contents = F.toList
fill :: Traversable t => t b -> [a] -> t a
fill t = St.evalState (T.traverse next t)
where
next _ = do (y:ys) <- St.get
St.put ys
return y
{-# INLINABLE[2] fill #-}
{-# INLINABLE[2] contents #-}
{-# RULES
"fill/list" fill = fillList
"contents/list" contents = id :: [a] -> [a]
#-}
fillList :: [a] -> [b] -> [b]
fillList _ ys = ys
shape :: Functor f => f a -> f ()
shape = fmap (const ())