fcf-containers-0.8.0: src/Fcf/Data/Tuple.hs
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wall #-}
{-# OPTIONS_GHC -Werror=incomplete-patterns #-}
{-|
Module : Fcf.Data.Tuple
Description : Type-level tuple functions
Copyright : (c) gspia 2020-
License : BSD
Maintainer : gspia
= Fcf.Data.Tuple
-}
--------------------------------------------------------------------------------
module Fcf.Data.Tuple where
import Fcf (Eval, Exp)
--------------------------------------------------------------------------------
-- For the doctests:
-- $setup
-- >>> import qualified GHC.TypeLits as TL
--------------------------------------------------------------------------------
-- | Swap
--
-- === __Example__
--
-- >>> :kind! Eval (Swap '(1, 2))
-- Eval (Swap '(1, 2)) :: (TL.Natural, TL.Natural)
-- = '(2, 1)
data Swap :: (a, b) -> Exp (b, a)
type instance Eval (Swap '(a,b)) = '(b,a)