module Data.Rope.Annotated.Internal
( A(A,rope)
, null
, head
, last
, unpack
) where
import Prelude hiding (null, head, last, take, drop, span, break, splitAt, takeWhile, dropWhile)
import Control.Applicative hiding (empty)
import Data.Rope.Util.Comonad
import Data.FingerTree (Measured(..))
import Data.Foldable (Foldable, foldMap)
import qualified Data.Foldable
import Data.Traversable (Traversable(traverse))
import qualified Data.Rope.Internal as Rope
import Data.Rope.Body (Offset(..))
import Data.Rope.Internal (Rope(..),Unpackable)
data A s a = A { rope :: !Rope, extractA :: a }
null :: A s a -> Bool
null = Rope.null . rope
head :: Unpackable t => A s a -> t
head = Rope.head . rope
last :: Unpackable t => A s a -> t
last = Rope.last . rope
unpack :: Unpackable t => A s a -> [t]
unpack (A s _) = Rope.unpack s
instance Measured Offset (A s a) where
measure = measure . rope
instance Functor (A s) where
fmap f (A s a) = A s (f a)
instance Comonad (A s) where
extract = extractA
extend f a@(A s _) = A s (f a)
duplicate a@(A s _) = A s a
instance Foldable (A s) where
foldr f z (A _ a) = f a z
foldr1 _ (A _ a) = a
foldl f z (A _ a) = f z a
foldl1 _ (A _ a) = a
foldMap f (A _ a) = f a
instance Traversable (A s) where
traverse f (A s a) = A s <$> f a