From 13cc13ebca8b85ae8a37811701d7bd33f54febb6 Mon Sep 17 00:00:00 2001 From: Tomasz Rybarczyk Date: Thu, 15 Oct 2020 01:11:38 +0200 Subject: [PATCH 1/4] Update TAG to v0.14.0-rc3; dependencies to master; psa to v0.8.0 --- .travis.yml | 3 ++- bower.json | 22 +++++++++++----------- package.json | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index c9fdf86..a6e22a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,8 @@ node_js: stable env: - PATH=$HOME/purescript:$PATH install: - - TAG=$(basename $(curl --location --silent --output /dev/null -w %{url_effective} https://github.com/purescript/purescript/releases/latest)) + # - TAG=$(basename $(curl --location --silent --output /dev/null -w %{url_effective} https://github.com/purescript/purescript/releases/latest)) + - TAG=v0.14.0-rc3 - curl --location --output $HOME/purescript.tar.gz https://github.com/purescript/purescript/releases/download/$TAG/linux64.tar.gz - tar -xvf $HOME/purescript.tar.gz -C $HOME/ - chmod a+x $HOME/purescript diff --git a/bower.json b/bower.json index 032cf16..efe378e 100644 --- a/bower.json +++ b/bower.json @@ -17,18 +17,18 @@ "package.json" ], "dependencies": { - "purescript-bifunctors": "^4.0.0", - "purescript-const": "^4.0.0", - "purescript-control": "^4.0.0", - "purescript-either": "^4.0.0", - "purescript-foldable-traversable": "^4.0.0", - "purescript-maybe": "^4.0.0", - "purescript-newtype": "^3.0.0", - "purescript-prelude": "^4.0.0", - "purescript-tuples": "^5.0.0", - "purescript-unsafe-coerce": "^4.0.0" + "purescript-bifunctors": "master", + "purescript-const": "master", + "purescript-control": "master", + "purescript-either": "master", + "purescript-foldable-traversable": "master", + "purescript-maybe": "master", + "purescript-newtype": "master", + "purescript-prelude": "master", + "purescript-tuples": "master", + "purescript-unsafe-coerce": "master" }, "devDependencies": { - "purescript-assert": "^4.0.0" + "purescript-assert": "master" } } diff --git a/package.json b/package.json index d34ea78..b8d0c47 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "devDependencies": { "pulp": "^15.0.0", - "purescript-psa": "^0.6.0", + "purescript-psa": "^0.8.0", "rimraf": "^2.6.2" } } From de615416b9119cde5ee1e26931791926c2f1667a Mon Sep 17 00:00:00 2001 From: Tomasz Rybarczyk Date: Thu, 15 Oct 2020 22:32:58 +0200 Subject: [PATCH 2/4] Add kind signatures --- src/Data/Functor/App.purs | 1 + src/Data/Functor/Compose.purs | 1 + src/Data/Functor/Coproduct.purs | 1 + src/Data/Functor/Coproduct/Inject.purs | 1 + src/Data/Functor/Coproduct/Nested.purs | 20 ++++++++++++++++++++ src/Data/Functor/Product.purs | 1 + src/Data/Functor/Product/Nested.purs | 20 ++++++++++++++++++++ 7 files changed, 45 insertions(+) diff --git a/src/Data/Functor/App.purs b/src/Data/Functor/App.purs index 47eb6c5..423db17 100644 --- a/src/Data/Functor/App.purs +++ b/src/Data/Functor/App.purs @@ -20,6 +20,7 @@ import Data.Traversable (class Traversable) import Data.TraversableWithIndex (class TraversableWithIndex) import Unsafe.Coerce (unsafeCoerce) +newtype App :: forall k. (k -> Type) -> k -> Type newtype App f a = App (f a) hoistApp :: forall f g. (f ~> g) -> App f ~> App g diff --git a/src/Data/Functor/Compose.purs b/src/Data/Functor/Compose.purs index 46d7e9a..4d75ee4 100644 --- a/src/Data/Functor/Compose.purs +++ b/src/Data/Functor/Compose.purs @@ -17,6 +17,7 @@ import Data.TraversableWithIndex (class TraversableWithIndex, traverseWithIndex) import Data.Tuple (Tuple, curry) -- | `Compose f g` is the composition of the two functors `f` and `g`. +newtype Compose ∷ ∀ k1 k2. (k2 → Type) → (k1 → k2) → k1 → Type newtype Compose f g a = Compose (f (g a)) bihoistCompose diff --git a/src/Data/Functor/Coproduct.purs b/src/Data/Functor/Coproduct.purs index 469856c..e2ebe0f 100644 --- a/src/Data/Functor/Coproduct.purs +++ b/src/Data/Functor/Coproduct.purs @@ -16,6 +16,7 @@ import Data.Traversable (class Traversable, traverse, sequence) import Data.TraversableWithIndex (class TraversableWithIndex, traverseWithIndex) -- | `Coproduct f g` is the coproduct of two functors `f` and `g` +newtype Coproduct :: forall k. (k -> Type) -> (k -> Type) -> k -> Type newtype Coproduct f g a = Coproduct (Either (f a) (g a)) -- | Left injection diff --git a/src/Data/Functor/Coproduct/Inject.purs b/src/Data/Functor/Coproduct/Inject.purs index 8aa89d3..6f8f136 100644 --- a/src/Data/Functor/Coproduct/Inject.purs +++ b/src/Data/Functor/Coproduct/Inject.purs @@ -6,6 +6,7 @@ import Data.Either (Either(..)) import Data.Functor.Coproduct (Coproduct(..), coproduct) import Data.Maybe (Maybe(..)) +class Inject :: forall k. (k -> Type) -> (k -> Type) -> Constraint class Inject f g where inj :: forall a. f a -> g a prj :: forall a. g a -> Maybe (f a) diff --git a/src/Data/Functor/Coproduct/Nested.purs b/src/Data/Functor/Coproduct/Nested.purs index 0a714de..9e37903 100644 --- a/src/Data/Functor/Coproduct/Nested.purs +++ b/src/Data/Functor/Coproduct/Nested.purs @@ -7,26 +7,46 @@ import Data.Either (Either(..)) import Data.Functor.Coproduct (Coproduct(..), coproduct, left, right) import Data.Newtype (unwrap) +type Coproduct1 :: forall k. (k -> Type) -> k -> Type type Coproduct1 a = C2 a (Const Void) +type Coproduct2 :: forall k. (k -> Type) -> (k -> Type) -> k -> Type type Coproduct2 a b = C3 a b (Const Void) +type Coproduct3 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct3 a b c = C4 a b c (Const Void) +type Coproduct4 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct4 a b c d = C5 a b c d (Const Void) +type Coproduct5 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct5 a b c d e = C6 a b c d e (Const Void) +type Coproduct6 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct6 a b c d e f = C7 a b c d e f (Const Void) +type Coproduct7 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct7 a b c d e f g = C8 a b c d e f g (Const Void) +type Coproduct8 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct8 a b c d e f g h = C9 a b c d e f g h (Const Void) +type Coproduct9 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct9 a b c d e f g h i = C10 a b c d e f g h i (Const Void) +type Coproduct10 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Coproduct10 a b c d e f g h i j = C11 a b c d e f g h i j (Const Void) +type C2 :: forall k. (k -> Type) -> (k -> Type) -> k -> Type type C2 a z = Coproduct a z +type C3 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C3 a b z = Coproduct a (C2 b z) +type C4 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C4 a b c z = Coproduct a (C3 b c z) +type C5 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C5 a b c d z = Coproduct a (C4 b c d z) +type C6 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C6 a b c d e z = Coproduct a (C5 b c d e z) +type C7 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C7 a b c d e f z = Coproduct a (C6 b c d e f z) +type C8 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C8 a b c d e f g z = Coproduct a (C7 b c d e f g z) +type C9 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C9 a b c d e f g h z = Coproduct a (C8 b c d e f g h z) +type C10 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C10 a b c d e f g h i z = Coproduct a (C9 b c d e f g h i z) +type C11 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type C11 a b c d e f g h i j z = Coproduct a (C10 b c d e f g h i j z) infixr 6 coproduct as <\/> diff --git a/src/Data/Functor/Product.purs b/src/Data/Functor/Product.purs index c628d00..3e0da24 100644 --- a/src/Data/Functor/Product.purs +++ b/src/Data/Functor/Product.purs @@ -16,6 +16,7 @@ import Data.TraversableWithIndex (class TraversableWithIndex, traverseWithIndex) import Data.Tuple (Tuple(..), fst, snd) -- | `Product f g` is the product of the two functors `f` and `g`. +newtype Product :: forall k. (k -> Type) -> (k -> Type) -> k -> Type newtype Product f g a = Product (Tuple (f a) (g a)) -- | Create a product. diff --git a/src/Data/Functor/Product/Nested.purs b/src/Data/Functor/Product/Nested.purs index ef88a23..e54c3b1 100644 --- a/src/Data/Functor/Product/Nested.purs +++ b/src/Data/Functor/Product/Nested.purs @@ -6,26 +6,46 @@ import Data.Const (Const(..)) import Data.Functor.Product (Product(..), product) import Data.Tuple (Tuple(..)) +type Product1 ∷ ∀ k. (k → Type) → k → Type type Product1 a = T2 a (Const Unit) +type Product2 ∷ ∀ k. (k → Type) → (k → Type) → k → Type type Product2 a b = T3 a b (Const Unit) +type Product3 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → k → Type type Product3 a b c = T4 a b c (Const Unit) +type Product4 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product4 a b c d = T5 a b c d (Const Unit) +type Product5 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product5 a b c d e= T6 a b c d e (Const Unit) +type Product6 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product6 a b c d e f = T7 a b c d e f (Const Unit) +type Product7 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product7 a b c d e f g = T8 a b c d e f g (Const Unit) +type Product8 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product8 a b c d e f g h = T9 a b c d e f g h (Const Unit) +type Product9 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product9 a b c d e f g h i = T10 a b c d e f g h i (Const Unit) +type Product10 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type Product10 a b c d e f g h i j = T11 a b c d e f g h i j (Const Unit) +type T2 ∷ ∀ k. (k → Type) → (k → Type) → k → Type type T2 a z = Product a z +type T3 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → k → Type type T3 a b z = Product a (T2 b z) +type T4 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T4 a b c z = Product a (T3 b c z) +type T5 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T5 a b c d z = Product a (T4 b c d z) +type T6 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T6 a b c d e z = Product a (T5 b c d e z) +type T7 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T7 a b c d e f z = Product a (T6 b c d e f z) +type T8 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T8 a b c d e f g z = Product a (T7 b c d e f g z) +type T9 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T9 a b c d e f g h z = Product a (T8 b c d e f g h z) +type T10 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T10 a b c d e f g h i z = Product a (T9 b c d e f g h i z) +type T11 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type type T11 a b c d e f g h i j z = Product a (T10 b c d e f g h i j z) infixr 6 product as From 01091a502f2e776b7e2940d39bd6f38fd9dffa0c Mon Sep 17 00:00:00 2001 From: Tomasz Rybarczyk Date: Mon, 26 Oct 2020 19:56:02 +0100 Subject: [PATCH 3/4] Add test script to package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b8d0c47..1fac874 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "private": true, "scripts": { "clean": "rimraf output && rimraf .pulp-cache", - "build": "pulp build -- --censor-lib --strict" + "build": "pulp build -- --censor-lib --strict", + "test": "pulp test" }, "devDependencies": { "pulp": "^15.0.0", From 08d488ca408b35c9e874f486b4fc7df18a6dd5b3 Mon Sep 17 00:00:00 2001 From: Tomasz Rybarczyk Date: Wed, 4 Nov 2020 18:52:37 +0100 Subject: [PATCH 4/4] Drop unicode usage from kind signatures --- src/Data/Functor/Compose.purs | 2 +- src/Data/Functor/Product/Nested.purs | 40 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Data/Functor/Compose.purs b/src/Data/Functor/Compose.purs index 4d75ee4..4cf0bce 100644 --- a/src/Data/Functor/Compose.purs +++ b/src/Data/Functor/Compose.purs @@ -17,7 +17,7 @@ import Data.TraversableWithIndex (class TraversableWithIndex, traverseWithIndex) import Data.Tuple (Tuple, curry) -- | `Compose f g` is the composition of the two functors `f` and `g`. -newtype Compose ∷ ∀ k1 k2. (k2 → Type) → (k1 → k2) → k1 → Type +newtype Compose :: forall k1 k2. (k2 -> Type) -> (k1 -> k2) -> k1 -> Type newtype Compose f g a = Compose (f (g a)) bihoistCompose diff --git a/src/Data/Functor/Product/Nested.purs b/src/Data/Functor/Product/Nested.purs index e54c3b1..8ec70a9 100644 --- a/src/Data/Functor/Product/Nested.purs +++ b/src/Data/Functor/Product/Nested.purs @@ -6,46 +6,46 @@ import Data.Const (Const(..)) import Data.Functor.Product (Product(..), product) import Data.Tuple (Tuple(..)) -type Product1 ∷ ∀ k. (k → Type) → k → Type +type Product1 :: forall k. (k -> Type) -> k -> Type type Product1 a = T2 a (Const Unit) -type Product2 ∷ ∀ k. (k → Type) → (k → Type) → k → Type +type Product2 :: forall k. (k -> Type) -> (k -> Type) -> k -> Type type Product2 a b = T3 a b (Const Unit) -type Product3 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → k → Type +type Product3 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product3 a b c = T4 a b c (Const Unit) -type Product4 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product4 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product4 a b c d = T5 a b c d (Const Unit) -type Product5 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product5 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product5 a b c d e= T6 a b c d e (Const Unit) -type Product6 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product6 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product6 a b c d e f = T7 a b c d e f (Const Unit) -type Product7 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product7 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product7 a b c d e f g = T8 a b c d e f g (Const Unit) -type Product8 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product8 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product8 a b c d e f g h = T9 a b c d e f g h (Const Unit) -type Product9 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product9 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product9 a b c d e f g h i = T10 a b c d e f g h i (Const Unit) -type Product10 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type Product10 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type Product10 a b c d e f g h i j = T11 a b c d e f g h i j (Const Unit) -type T2 ∷ ∀ k. (k → Type) → (k → Type) → k → Type +type T2 :: forall k. (k -> Type) -> (k -> Type) -> k -> Type type T2 a z = Product a z -type T3 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → k → Type +type T3 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T3 a b z = Product a (T2 b z) -type T4 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T4 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T4 a b c z = Product a (T3 b c z) -type T5 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T5 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T5 a b c d z = Product a (T4 b c d z) -type T6 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T6 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T6 a b c d e z = Product a (T5 b c d e z) -type T7 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T7 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T7 a b c d e f z = Product a (T6 b c d e f z) -type T8 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T8 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T8 a b c d e f g z = Product a (T7 b c d e f g z) -type T9 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T9 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T9 a b c d e f g h z = Product a (T8 b c d e f g h z) -type T10 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T10 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T10 a b c d e f g h i z = Product a (T9 b c d e f g h i z) -type T11 ∷ ∀ k. (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → (k → Type) → k → Type +type T11 :: forall k. (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> (k -> Type) -> k -> Type type T11 a b c d e f g h i j z = Product a (T10 b c d e f g h i j z) infixr 6 product as