{-# LANGUAGE CPP #-}
module Acc.NeAcc
(
NeAcc,
)
where
import Acc.Prelude
import qualified Acc.BinTree1 as BinTree1
newtype NeAcc a =
NeAcc (BinTree1.BinTree1 a)
deriving (Generic, Generic1)
instance Show a => Show (NeAcc a) where
show =
show . toList
instance NFData a => NFData (NeAcc a)
instance NFData1 NeAcc
instance IsList (NeAcc a) where
type Item (NeAcc a) = a
fromList =
\ case
a : b -> NeAcc (BinTree1.fromList1 a b)
_ -> error "Acc.NeAcc.fromList empty input list"
toList =
foldr (:) []
instance Semigroup (NeAcc a) where
(<>) =
(<!>)
deriving instance Functor NeAcc
deriving instance Applicative NeAcc
instance Alt NeAcc where
(<!>) (NeAcc l) (NeAcc r) =
NeAcc (l <!> r)
instance Foldable NeAcc where
foldMap f (NeAcc tree) =
foldMap f tree
#if MIN_VERSION_base(4,13,0)
foldMap' f (NeAcc tree) =
foldMap' f tree
#endif
foldr step acc (NeAcc tree) =
foldr step acc tree
foldr' step acc (NeAcc tree) =
foldr' step acc tree
foldl step acc (NeAcc tree) =
foldl step acc tree
foldl' step acc (NeAcc tree) =
foldl' step acc tree
deriving instance Traversable NeAcc
deriving instance Foldable1 NeAcc
instance Traversable1 NeAcc where
traverse1 f (NeAcc tree) =
NeAcc <$> traverse1 f tree