{-# LANGUAGE LinearTypes #-} {-# LANGUAGE NoImplicitPrelude #-} -- | = The data functor hierarchy -- -- This module defines the data functor library. Unlike in the case of -- non-linear, unrestricted, functors, there is a split between data functors, -- which represent containers, and control functors which represent effects. -- Please read this -- [blog post](https://www.tweag.io/posts/2020-01-16-data-vs-control.html). -- For more details, see "Control.Functor.Linear". -- -- * Linear data functors should be thought of as containers of data. -- * Linear data applicative functors should be thought of as containers -- that can be zipped. -- * Linear data traversable functors should be thought of as -- containers which store a finite number of values. -- -- This module also defines 'genericTraverse' for types implementing -- 'Generics.Linear.Generic1'. module Data.Functor.Linear ( -- * Data Functor Hierarchy Functor (..), (<$>), (<$), void, Applicative (..), Const (..), -- * Linear traversable hierarchy Traversable (..), genericTraverse, GTraversable, mapM, sequenceA, for, forM, mapAccumL, mapAccumR, ) where import Data.Functor.Const import Data.Functor.Linear.Internal.Applicative import Data.Functor.Linear.Internal.Functor import Data.Functor.Linear.Internal.Traversable