type-level-kv-list 2.0.1.0 → 2.0.1.1
raw patch · 2 files changed
+40/−1 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Data.KVList: instance (Data.KVList.ShowFields (Data.KVList.KVList kvs), GHC.Show.Show v) => Data.KVList.ShowFields (Data.KVList.KVList ((k Data.KVList.:= v) : kvs))
+ Data.KVList: instance Data.KVList.ShowFields (Data.KVList.KVList '[])
+ Data.KVList: instance Data.KVList.ShowFields (Data.KVList.KVList kvs) => GHC.Show.Show (Data.KVList.KVList kvs)
Files
- src/Data/KVList.hs +39/−0
- type-level-kv-list.cabal +1/−1
src/Data/KVList.hs view
@@ -29,6 +29,8 @@ import Prelude +import Data.Functor ((<&>))+import qualified Data.List as List import Data.Kind (Constraint, Type) import Data.Typeable (Typeable, typeOf) import GHC.TypeLits (KnownSymbol, Symbol, TypeError, ErrorMessage(Text))@@ -53,6 +55,43 @@ data KVList (kvs :: [Type]) where KVNil :: KVList '[] KVCons :: (KnownSymbol key) => key := v -> KVList xs -> KVList ((key := v) ': xs)+++{-| -}+instance ShowFields (KVList kvs) => Show (KVList kvs) where+ show kvs =+ List.unlines $+ "KVList.empty" : showFields kvs++class ShowFields a where+ showFields :: a -> [String]++instance ShowFields (KVList '[]) where+ showFields _ = []++instance ( ShowFields (KVList kvs)+ , Show v+ ) => ShowFields (KVList ((k := v) ': kvs)) where+ showFields (KVCons (k := v) next) =+ let+ firstLine str =+ List.unwords+ [ "&="+ , "#" <> show k+ , ":="+ , str+ ]+ in+ ( case List.lines $ show v of+ [] -> [ firstLine "" ]+ [a] -> [ firstLine a ]+ as ->+ List.concat+ [ [ firstLine "(" ]+ , as <&> \x -> " " ++ x+ , [ ")" ]+ ]+ ) ++ showFields next {-| -} empty :: KVList '[]
type-level-kv-list.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: type-level-kv-list-version: 2.0.1.0+version: 2.0.1.1 synopsis: Type level Key-Value list. description: This library provides a brief implementation for extensible records. category: Data