module Data.Key(
Key, keyPair, toKey, fromKey,
sortKeys, sortWith
) where
import Data.List
import General.Code
data Key k v = Key k v
instance Eq k => Eq (Key k v) where
Key k1 v1 == Key k2 v2 = k1 == k2
instance Ord k => Ord (Key k v) where
compare (Key k1 v1) (Key k2 v2) = compare k1 k2
keyPair :: k -> v -> Key k v
keyPair = Key
toKey :: (v -> k) -> v -> Key k v
toKey f v = Key (f v) v
fromKey :: Key k v -> v
fromKey (Key k v) = v
sortKeys :: Ord k => [Key k v] -> [v]
sortKeys = map fromKey . sort
sortWith :: Ord k => (v -> k) -> [v] -> [v]
sortWith f = sortKeys . map (toKey f)