module Data.Container.Refined.Conversion where import Data.Constraint (Dict(..)) import Data.Container.Refined.Hashable import Data.Container.Refined.Proofs import qualified Data.HashMap.Lazy as HashMap import Data.HashMap.Common.Refined import qualified Data.HashSet as HashSet import qualified Data.IntMap as IntMap import Data.IntMap.Common.Refined import qualified Data.IntSet as IntSet import qualified Data.Map as Map import Data.Map.Common.Refined import Data.Proxy import Data.Reflection import qualified Data.Set as Set import Data.Type.Equality ((:~:)(..)) import Unsafe.Coerce unsafeWrapSet :: forall r r' a. KnownSet r' a => Proxy r' -> Set r a unsafeWrapSet :: forall r r' a. KnownSet r' a => Proxy r' -> Set r a unsafeWrapSet Proxy r' _ = case forall a b. a -> b unsafeCoerce forall {k} (a :: k). a :~: a Refl :: r :~: r' of r :~: r' Refl -> forall (a :: Constraint). a => Dict a Dict {-# INLINE unsafeWrapSet #-} unsafeWrapIntSet :: forall r r'. KnownIntSet r' => Proxy r' -> IntSet r unsafeWrapIntSet :: forall r r'. KnownIntSet r' => Proxy r' -> IntSet r unsafeWrapIntSet Proxy r' _ = case forall a b. a -> b unsafeCoerce forall {k} (a :: k). a :~: a Refl :: r :~: r' of r :~: r' Refl -> forall (a :: Constraint). a => Dict a Dict {-# INLINE unsafeWrapIntSet #-} unsafeWrapHashSet :: forall r r' a. KnownHashSet r' a => Proxy r' -> HashSet r a unsafeWrapHashSet :: forall r r' a. KnownHashSet r' a => Proxy r' -> HashSet r a unsafeWrapHashSet Proxy r' _ = case forall a b. a -> b unsafeCoerce forall {k} (a :: k). a :~: a Refl :: r :~: r' of r :~: r' Refl -> forall (a :: Constraint). a => Dict a Dict {-# INLINE unsafeWrapHashSet #-} set2IntSet :: forall s. KnownSet s Int => IntSet s set2IntSet :: forall s. KnownSet s Int => IntSet s set2IntSet = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify ([Int] -> IntSet IntSet.fromDistinctAscList forall a b. (a -> b) -> a -> b $ forall a. Set a -> [a] Set.toAscList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r'. KnownIntSet r' => Proxy r' -> IntSet r unsafeWrapIntSet map2IntMap :: forall s a. Map s Int a -> IntMap s a map2IntMap :: forall s a. Map s Int a -> IntMap s a map2IntMap (Map Map Int a m) = forall s a. IntMap a -> IntMap s a IntMap forall a b. (a -> b) -> a -> b $ forall a. [(Int, a)] -> IntMap a IntMap.fromDistinctAscList forall a b. (a -> b) -> a -> b $ forall k a. Map k a -> [(k, a)] Map.toAscList Map Int a m set2HashSet :: forall s a. (Hashable a, KnownSet s a) => HashSet s a set2HashSet :: forall s a. (Hashable a, KnownSet s a) => HashSet s a set2HashSet = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify (forall a. (Eq a, Hashable a) => [a] -> HashSet a HashSet.fromList forall a b. (a -> b) -> a -> b $ forall a. Set a -> [a] Set.toList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r' a. KnownHashSet r' a => Proxy r' -> HashSet r a unsafeWrapHashSet map2HashMap :: forall s k a. Hashable k => Map s k a -> HashMap s k a map2HashMap :: forall s k a. Hashable k => Map s k a -> HashMap s k a map2HashMap (Map Map k a m) = forall s k a. HashMap k a -> HashMap s k a HashMap forall a b. (a -> b) -> a -> b $ forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v HashMap.fromList forall a b. (a -> b) -> a -> b $ forall k a. Map k a -> [(k, a)] Map.toList Map k a m intSet2Set :: forall s. KnownIntSet s => Set s Int intSet2Set :: forall s. KnownIntSet s => Set s Int intSet2Set = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify (forall a. [a] -> Set a Set.fromDistinctAscList forall a b. (a -> b) -> a -> b $ IntSet -> [Int] IntSet.toAscList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r' a. KnownSet r' a => Proxy r' -> Set r a unsafeWrapSet intMap2Map :: forall s a. IntMap s a -> Map s Int a intMap2Map :: forall s a. IntMap s a -> Map s Int a intMap2Map (IntMap IntMap a m) = forall s k a. Map k a -> Map s k a Map forall a b. (a -> b) -> a -> b $ forall k a. [(k, a)] -> Map k a Map.fromDistinctAscList forall a b. (a -> b) -> a -> b $ forall a. IntMap a -> [(Int, a)] IntMap.toAscList IntMap a m intSet2HashSet :: forall s. KnownIntSet s => HashSet s Int intSet2HashSet :: forall s. KnownIntSet s => HashSet s Int intSet2HashSet = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify (forall a. (Eq a, Hashable a) => [a] -> HashSet a HashSet.fromList forall a b. (a -> b) -> a -> b $ IntSet -> [Int] IntSet.toList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r' a. KnownHashSet r' a => Proxy r' -> HashSet r a unsafeWrapHashSet intMap2HashMap :: forall s a. IntMap s a -> HashMap s Int a intMap2HashMap :: forall s a. IntMap s a -> HashMap s Int a intMap2HashMap (IntMap IntMap a m) = forall s k a. HashMap k a -> HashMap s k a HashMap forall a b. (a -> b) -> a -> b $ forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v HashMap.fromList forall a b. (a -> b) -> a -> b $ forall a. IntMap a -> [(Int, a)] IntMap.toList IntMap a m hashSet2Set :: forall s a. (Ord a, KnownHashSet s a) => Set s a hashSet2Set :: forall s a. (Ord a, KnownHashSet s a) => Set s a hashSet2Set = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify (forall a. Ord a => [a] -> Set a Set.fromList forall a b. (a -> b) -> a -> b $ forall a. HashSet a -> [a] HashSet.toList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r' a. KnownSet r' a => Proxy r' -> Set r a unsafeWrapSet hashMap2Map :: forall s k a. Ord k => HashMap s k a -> Map s k a hashMap2Map :: forall s k a. Ord k => HashMap s k a -> Map s k a hashMap2Map (HashMap HashMap k a m) = forall s k a. Map k a -> Map s k a Map forall a b. (a -> b) -> a -> b $ forall k a. Ord k => [(k, a)] -> Map k a Map.fromList forall a b. (a -> b) -> a -> b $ forall k v. HashMap k v -> [(k, v)] HashMap.toList HashMap k a m hashSet2IntSet :: forall s. KnownHashSet s Int => IntSet s hashSet2IntSet :: forall s. KnownHashSet s Int => IntSet s hashSet2IntSet = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r reify ([Int] -> IntSet IntSet.fromList forall a b. (a -> b) -> a -> b $ forall a. HashSet a -> [a] HashSet.toList forall a b. (a -> b) -> a -> b $ forall {k} (s :: k) a (proxy :: k -> *). Reifies s a => proxy s -> a reflect forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t Proxy @s) forall r r'. KnownIntSet r' => Proxy r' -> IntSet r unsafeWrapIntSet hashMap2IntMap :: forall s a. HashMap s Int a -> IntMap s a hashMap2IntMap :: forall s a. HashMap s Int a -> IntMap s a hashMap2IntMap (HashMap HashMap Int a m) = forall s a. IntMap a -> IntMap s a IntMap forall a b. (a -> b) -> a -> b $ forall a. [(Int, a)] -> IntMap a IntMap.fromList forall a b. (a -> b) -> a -> b $ forall k v. HashMap k v -> [(k, v)] HashMap.toList HashMap Int a m