-- |
-- Module      : Test.Extrapolate.TypeBinding
-- Copyright   : (c) 2017-2019 Rudy Matela
-- License     : 3-Clause BSD  (see the file LICENSE)
-- Maintainer  : Rudy Matela <rudy@matela.com.br>
--
-- This module is part of Extrapolate,
-- a library for generalization of counter-examples.
--
-- Some type binding operators that are useful when defining Generalizable
-- instances.
module Test.Extrapolate.TypeBinding
  ( arg1
  , arg2
  , arg3
  , arg4
  , arg5
  , arg6
  , (==:)
  , argTy1of1
  , argTy1of2, argTy2of2
  , argTy1of3, argTy2of3, argTy3of3
  , argTy1of4, argTy2of4, argTy3of4, argTy4of4
  , argTy1of5, argTy2of5, argTy3of5, argTy4of5, argTy5of5
  , argTy1of6, argTy2of6, argTy3of6, argTy4of6, argTy5of6, argTy6of6
  , module Test.LeanCheck.Utils.TypeBinding
  )
where

import Test.LeanCheck.Utils.TypeBinding

-- TODO: reexport LeanCheck's typebinding operators
-- TODO: or maybe re-export Express's typebinding operators?

arg1 :: (a -> b) -> a
arg1 :: (a -> b) -> a
arg1 a -> b
_  =  a
forall a. HasCallStack => a
undefined

arg2 :: (a -> b -> c) -> b
arg2 :: (a -> b -> c) -> b
arg2 a -> b -> c
_  =  b
forall a. HasCallStack => a
undefined

arg3 :: (a -> b -> c -> d) -> c
arg3 :: (a -> b -> c -> d) -> c
arg3 a -> b -> c -> d
_  =  c
forall a. HasCallStack => a
undefined

arg4 :: (a -> b -> c -> d -> e) -> d
arg4 :: (a -> b -> c -> d -> e) -> d
arg4 a -> b -> c -> d -> e
_  =  d
forall a. HasCallStack => a
undefined

arg5 :: (a -> b -> c -> d -> e -> f) -> e
arg5 :: (a -> b -> c -> d -> e -> f) -> e
arg5 a -> b -> c -> d -> e -> f
_  =  e
forall a. HasCallStack => a
undefined

arg6 :: (a -> b -> c -> d -> e -> f -> g) -> f
arg6 :: (a -> b -> c -> d -> e -> f -> g) -> f
arg6 a -> b -> c -> d -> e -> f -> g
_  =  f
forall a. HasCallStack => a
undefined

(==:) :: (a -> (b -> c -> d)) -> a -> b
a -> b -> c -> d
x ==: :: (a -> b -> c -> d) -> a -> b
==: a
y  =  b
forall a. HasCallStack => a
undefined


argTy1of1 :: con a -> a
argTy1of1 :: con a -> a
argTy1of1 con a
_ = a
forall a. HasCallStack => a
undefined


argTy1of2 :: con a b -> a
argTy1of2 :: con a b -> a
argTy1of2 con a b
_ = a
forall a. HasCallStack => a
undefined

argTy2of2 :: con a b -> b
argTy2of2 :: con a b -> b
argTy2of2 con a b
_ = b
forall a. HasCallStack => a
undefined


argTy1of3 :: con a b c -> a
argTy1of3 :: con a b c -> a
argTy1of3 con a b c
_ = a
forall a. HasCallStack => a
undefined

argTy2of3 :: con a b c -> b
argTy2of3 :: con a b c -> b
argTy2of3 con a b c
_ = b
forall a. HasCallStack => a
undefined

argTy3of3 :: con a b c -> c
argTy3of3 :: con a b c -> c
argTy3of3 con a b c
_ = c
forall a. HasCallStack => a
undefined


argTy1of4 :: con a b c d -> a
argTy1of4 :: con a b c d -> a
argTy1of4 con a b c d
_ = a
forall a. HasCallStack => a
undefined

argTy2of4 :: con a b c d -> b
argTy2of4 :: con a b c d -> b
argTy2of4 con a b c d
_ = b
forall a. HasCallStack => a
undefined

argTy3of4 :: con a b c d -> c
argTy3of4 :: con a b c d -> c
argTy3of4 con a b c d
_ = c
forall a. HasCallStack => a
undefined

argTy4of4 :: con a b c d -> d
argTy4of4 :: con a b c d -> d
argTy4of4 con a b c d
_ = d
forall a. HasCallStack => a
undefined


argTy1of5 :: con a b c d e -> a
argTy1of5 :: con a b c d e -> a
argTy1of5 con a b c d e
_ = a
forall a. HasCallStack => a
undefined

argTy2of5 :: con a b c d e -> b
argTy2of5 :: con a b c d e -> b
argTy2of5 con a b c d e
_ = b
forall a. HasCallStack => a
undefined

argTy3of5 :: con a b c d e -> c
argTy3of5 :: con a b c d e -> c
argTy3of5 con a b c d e
_ = c
forall a. HasCallStack => a
undefined

argTy4of5 :: con a b c d e -> d
argTy4of5 :: con a b c d e -> d
argTy4of5 con a b c d e
_ = d
forall a. HasCallStack => a
undefined

argTy5of5 :: con a b c d e -> e
argTy5of5 :: con a b c d e -> e
argTy5of5 con a b c d e
_ = e
forall a. HasCallStack => a
undefined


argTy1of6 :: con a b c d e f -> a
argTy1of6 :: con a b c d e f -> a
argTy1of6 con a b c d e f
_ = a
forall a. HasCallStack => a
undefined

argTy2of6 :: con a b c d e f -> b
argTy2of6 :: con a b c d e f -> b
argTy2of6 con a b c d e f
_ = b
forall a. HasCallStack => a
undefined

argTy3of6 :: con a b c d e f -> c
argTy3of6 :: con a b c d e f -> c
argTy3of6 con a b c d e f
_ = c
forall a. HasCallStack => a
undefined

argTy4of6 :: con a b c d e f -> d
argTy4of6 :: con a b c d e f -> d
argTy4of6 con a b c d e f
_ = d
forall a. HasCallStack => a
undefined

argTy5of6 :: con a b c d e f -> e
argTy5of6 :: con a b c d e f -> e
argTy5of6 con a b c d e f
_ = e
forall a. HasCallStack => a
undefined

argTy6of6 :: con a b c d e f -> f
argTy6of6 :: con a b c d e f -> f
argTy6of6 con a b c d e f
_ = f
forall a. HasCallStack => a
undefined