yoko-0.9: Data/Yoko/TypeBasics.hs
{-# LANGUAGE TypeFamilies, UndecidableInstances, DataKinds, PolyKinds #-}
{- |
Module : Data.Yoko.TypeBasics
Copyright : (c) The University of Kansas 2012
License : BSD3
Maintainer : nicolas.frisby@gmail.com
Stability : experimental
Portability : see LANGUAGE pragmas (... GHC)
Some type-level programming basics.
-}
module Data.Yoko.TypeBasics (
Proxy(..), Equal, derive_data, derive_pro,
-- ** Re-exports
module Data.Yoko.MaybeKind, encode
) where
import Data.Yoko.MaybeKind
import Type.Spine
import Type.Ord (IsEQ)
import Type.Serialize
import Type.Ord.SpineSerialize (SpineCompare)
-- | A polykinded proxy.
data Proxy a = Proxy
-- | Convenient synonym. @type Equal a b = 'IsEQ' ('SpineCompare' a b)@
type Equal a b = IsEQ (SpineCompare a b)
-- | Template Haskell derivation for the @type-spine@ and @type-cereal@
-- packages' 'Spine' and 'Serialize' type families, which support generic
-- instances of 'Compare'.
derive_data n = do
d <- spineType_d n
(d ++) `fmap` serializeTypeAsHash_data n
derive_pro n = do
d <- spineType_pro n
(d ++) `fmap` serializeTypeAsHash_pro n