{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} module HaskellWorks.Data.Item.Strict where import Control.DeepSeq (NFData) import GHC.Generics (Generic) import HaskellWorks.Data.FingerTree.Strict data Item k a = Item !k !a deriving (Item k a -> Item k a -> Bool (Item k a -> Item k a -> Bool) -> (Item k a -> Item k a -> Bool) -> Eq (Item k a) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall k a. (Eq k, Eq a) => Item k a -> Item k a -> Bool /= :: Item k a -> Item k a -> Bool $c/= :: forall k a. (Eq k, Eq a) => Item k a -> Item k a -> Bool == :: Item k a -> Item k a -> Bool $c== :: forall k a. (Eq k, Eq a) => Item k a -> Item k a -> Bool Eq, Int -> Item k a -> ShowS [Item k a] -> ShowS Item k a -> String (Int -> Item k a -> ShowS) -> (Item k a -> String) -> ([Item k a] -> ShowS) -> Show (Item k a) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall k a. (Show k, Show a) => Int -> Item k a -> ShowS forall k a. (Show k, Show a) => [Item k a] -> ShowS forall k a. (Show k, Show a) => Item k a -> String showList :: [Item k a] -> ShowS $cshowList :: forall k a. (Show k, Show a) => [Item k a] -> ShowS show :: Item k a -> String $cshow :: forall k a. (Show k, Show a) => Item k a -> String showsPrec :: Int -> Item k a -> ShowS $cshowsPrec :: forall k a. (Show k, Show a) => Int -> Item k a -> ShowS Show, (forall x. Item k a -> Rep (Item k a) x) -> (forall x. Rep (Item k a) x -> Item k a) -> Generic (Item k a) forall x. Rep (Item k a) x -> Item k a forall x. Item k a -> Rep (Item k a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall k a x. Rep (Item k a) x -> Item k a forall k a x. Item k a -> Rep (Item k a) x $cto :: forall k a x. Rep (Item k a) x -> Item k a $cfrom :: forall k a x. Item k a -> Rep (Item k a) x Generic, Item k a -> () (Item k a -> ()) -> NFData (Item k a) forall a. (a -> ()) -> NFData a forall k a. (NFData k, NFData a) => Item k a -> () rnf :: Item k a -> () $crnf :: forall k a. (NFData k, NFData a) => Item k a -> () NFData) instance Functor (Item k) where fmap :: (a -> b) -> Item k a -> Item k b fmap a -> b f (Item k i a t) = k -> b -> Item k b forall k a. k -> a -> Item k a Item k i (a -> b f a t) instance Foldable (Item k) where foldMap :: (a -> m) -> Item k a -> m foldMap a -> m f (Item k _ a x) = a -> m f a x instance Traversable (Item k) where traverse :: (a -> f b) -> Item k a -> f (Item k b) traverse a -> f b f (Item k i a x) = k -> b -> Item k b forall k a. k -> a -> Item k a Item k i (b -> Item k b) -> f b -> f (Item k b) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> a -> f b f a x instance (Monoid k) => Measured k (Item k a) where measure :: Item k a -> k measure (Item k k a _) = k k