typelevel-1.2.2: src/Type/Operators.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds #-}
module Type.Operators where
import Data.Typeable
import Prelude
import GHC.Exts (Constraint)
import GHC.TypeLits
import Type.Bool
import Type.Container
import Type.Wrapped
-- | The `$$` operator is just like `$` one but with even lower precedence level.
-- Unlike value-level `$`, the type-level one has precedence level of `infixr 1`
-- in order to be used in function arguments, like `edge :: Node $ Source a -> Node $ Target a -> a`.
-- The `$$` operator has higher precedence than `->`, so the above expression would not be valid when using it.
infixr 0 $$
type f $$ a = f a
infixr 1 $
type f $ a = f a
infixl 1 &
type a & f = f a