{-# LANGUAGE BangPatterns #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UnboxedTuples #-} module Data.Map.Subset.Strict.Lifted ( I.Map , singleton , lookup , toList , fromList ) where import Prelude hiding (lookup) import Data.Map.Subset.Strict.Internal (Map) import Data.Set.Lifted.Internal (Set(..)) import Data.Bifunctor (first) import Data.Semigroup (Semigroup) import qualified Data.Map.Subset.Strict.Internal as I singleton :: Eq v => Set k -> v -> Map k v singleton :: forall v k. Eq v => Set k -> v -> Map k v singleton (Set Set Array k s) v v = forall v (arr :: * -> *) k. (Eq v, Contiguous arr, Element arr k) => Set arr k -> v -> Map k v I.singleton Set Array k s v v lookup :: Ord k => Set k -> Map k v -> Maybe v lookup :: forall k v. Ord k => Set k -> Map k v -> Maybe v lookup (Set Set Array k s) Map k v m = forall (arr :: * -> *) k v. (Ord k, Contiguous arr, Element arr k) => Set arr k -> Map k v -> Maybe v I.lookup Set Array k s Map k v m toList :: Map k v -> [(Set k,v)] toList :: forall k v. Map k v -> [(Set k, v)] toList = forall a b. (a -> b) -> [a] -> [b] map (forall (p :: * -> * -> *) a b c. Bifunctor p => (a -> b) -> p a c -> p b c first forall a. Set Array a -> Set a Set) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (arr :: * -> *) k v. (Contiguous arr, Element arr k) => Map k v -> [(Set arr k, v)] I.toList fromList :: (Ord k, Eq v, Semigroup v) => [(Set k,v)] -> Map k v fromList :: forall k v. (Ord k, Eq v, Semigroup v) => [(Set k, v)] -> Map k v fromList = forall (arr :: * -> *) k v. (Contiguous arr, Element arr k, Ord k, Eq v) => [(Set arr k, v)] -> Map k v I.fromList forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a b. (a -> b) -> [a] -> [b] map (forall (p :: * -> * -> *) a b c. Bifunctor p => (a -> b) -> p a c -> p b c first forall a. Set a -> Set Array a getSet)