From 252753f898bb67b3f42f83248a85638b1bc11fb4 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Wed, 11 Sep 2024 20:58:18 +0200 Subject: Show instance --- src/Data/Dependent/EnumMap/Strict/Internal.hs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Data/Dependent/EnumMap/Strict/Internal.hs b/src/Data/Dependent/EnumMap/Strict/Internal.hs index 17de2fd..1a26f1a 100644 --- a/src/Data/Dependent/EnumMap/Strict/Internal.hs +++ b/src/Data/Dependent/EnumMap/Strict/Internal.hs @@ -1,6 +1,7 @@ {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} +{-# LANGUAGE QuantifiedConstraints #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} module Data.Dependent.EnumMap.Strict.Internal where @@ -8,7 +9,9 @@ module Data.Dependent.EnumMap.Strict.Internal where import Data.Bifunctor (bimap) import Data.Dependent.Sum import qualified Data.IntMap.Strict as IM +import Data.Kind (Type) import Data.Some +import Text.Show (showListWith) import Unsafe.Coerce (unsafeCoerce) @@ -16,6 +19,11 @@ data KV k v = forall a. KV !(Enum1Info k) !(v a) newtype DEnumMap k v = DEnumMap (IM.IntMap (KV k v)) +instance (Enum1 k, forall a. Show (k a), forall a. Show (v a)) + => Show (DEnumMap (k :: kind -> Type) (v :: kind -> Type)) where + showsPrec d mp = showParen (d > 10) $ + showString "DEnumMap " . showListWith (\(k :=> v) -> showsPrec 2 k . showString " :=> " . showsPrec 1 v) (toList mp) + class Enum1 f where type Enum1Info f fromEnum1 :: f a -> (Int, Enum1Info f) @@ -213,11 +221,15 @@ keys (DEnumMap m) = map (\(k, KV inf _) -> toEnum1 k inf) (IM.assocs m) -- ** Lists --- toList +toList :: Enum1 k => DEnumMap k v -> [DSum k v] +toList = toAscList -- ** Ordered lists --- toAscList +toAscList :: Enum1 k => DEnumMap k v -> [DSum k v] +toAscList (DEnumMap m) = + map (\(i, KV inf v) -> case toEnum1 i inf of Some k -> k :=> coe1 v) + (IM.toAscList m) toDescList :: Enum1 k => DEnumMap k v -> [DSum k v] toDescList (DEnumMap m) = -- cgit v1.2.3-70-g09d2