{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_HADDOCK hide #-}
{-# OPTIONS_HADDOCK prune #-}

-- |
-- Module      : Data.Hople
-- Copyright   : (c) Justin Le 2016
-- License     : BSD3
--
-- Maintainer  : justin@jle.im
-- Stability   : experimental
-- Portability : non-portable
--
-- Homogeneous strict tuples used for implementing 'liftU2', etc.
module Data.Hople (
  H1 (..),
  H2 (..),
  H3 (..),
  H4 (..),
  H5 (..),
  curryH1,
  curryH2,
  curryH3,
  curryH4,
  curryH5,
  uncurryH1,
  uncurryH2,
  uncurryH3,
  uncurryH4,
  uncurryH5,
)
where

import Prelude.Compat

newtype H1 a = H1 a
  deriving ((forall a b. (a -> b) -> H1 a -> H1 b)
-> (forall a b. a -> H1 b -> H1 a) -> Functor H1
forall a b. a -> H1 b -> H1 a
forall a b. (a -> b) -> H1 a -> H1 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> H1 a -> H1 b
fmap :: forall a b. (a -> b) -> H1 a -> H1 b
$c<$ :: forall a b. a -> H1 b -> H1 a
<$ :: forall a b. a -> H1 b -> H1 a
Functor, (forall m. Monoid m => H1 m -> m)
-> (forall m a. Monoid m => (a -> m) -> H1 a -> m)
-> (forall m a. Monoid m => (a -> m) -> H1 a -> m)
-> (forall a b. (a -> b -> b) -> b -> H1 a -> b)
-> (forall a b. (a -> b -> b) -> b -> H1 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H1 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H1 a -> b)
-> (forall a. (a -> a -> a) -> H1 a -> a)
-> (forall a. (a -> a -> a) -> H1 a -> a)
-> (forall a. H1 a -> [a])
-> (forall a. H1 a -> Bool)
-> (forall a. H1 a -> Int)
-> (forall a. Eq a => a -> H1 a -> Bool)
-> (forall a. Ord a => H1 a -> a)
-> (forall a. Ord a => H1 a -> a)
-> (forall a. Num a => H1 a -> a)
-> (forall a. Num a => H1 a -> a)
-> Foldable H1
forall a. Eq a => a -> H1 a -> Bool
forall a. Num a => H1 a -> a
forall a. Ord a => H1 a -> a
forall m. Monoid m => H1 m -> m
forall a. H1 a -> Bool
forall a. H1 a -> Int
forall a. H1 a -> [a]
forall a. (a -> a -> a) -> H1 a -> a
forall m a. Monoid m => (a -> m) -> H1 a -> m
forall b a. (b -> a -> b) -> b -> H1 a -> b
forall a b. (a -> b -> b) -> b -> H1 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => H1 m -> m
fold :: forall m. Monoid m => H1 m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> H1 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> H1 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> H1 a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> H1 a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> H1 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> H1 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> H1 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> H1 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> H1 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> H1 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> H1 a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> H1 a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> H1 a -> a
foldr1 :: forall a. (a -> a -> a) -> H1 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> H1 a -> a
foldl1 :: forall a. (a -> a -> a) -> H1 a -> a
$ctoList :: forall a. H1 a -> [a]
toList :: forall a. H1 a -> [a]
$cnull :: forall a. H1 a -> Bool
null :: forall a. H1 a -> Bool
$clength :: forall a. H1 a -> Int
length :: forall a. H1 a -> Int
$celem :: forall a. Eq a => a -> H1 a -> Bool
elem :: forall a. Eq a => a -> H1 a -> Bool
$cmaximum :: forall a. Ord a => H1 a -> a
maximum :: forall a. Ord a => H1 a -> a
$cminimum :: forall a. Ord a => H1 a -> a
minimum :: forall a. Ord a => H1 a -> a
$csum :: forall a. Num a => H1 a -> a
sum :: forall a. Num a => H1 a -> a
$cproduct :: forall a. Num a => H1 a -> a
product :: forall a. Num a => H1 a -> a
Foldable, Functor H1
Foldable H1
(Functor H1, Foldable H1) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> H1 a -> f (H1 b))
-> (forall (f :: * -> *) a. Applicative f => H1 (f a) -> f (H1 a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> H1 a -> m (H1 b))
-> (forall (m :: * -> *) a. Monad m => H1 (m a) -> m (H1 a))
-> Traversable H1
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => H1 (m a) -> m (H1 a)
forall (f :: * -> *) a. Applicative f => H1 (f a) -> f (H1 a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> H1 a -> m (H1 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H1 a -> f (H1 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H1 a -> f (H1 b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H1 a -> f (H1 b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => H1 (f a) -> f (H1 a)
sequenceA :: forall (f :: * -> *) a. Applicative f => H1 (f a) -> f (H1 a)
$cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H1 a -> m (H1 b)
mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H1 a -> m (H1 b)
$csequence :: forall (m :: * -> *) a. Monad m => H1 (m a) -> m (H1 a)
sequence :: forall (m :: * -> *) a. Monad m => H1 (m a) -> m (H1 a)
Traversable, Int -> H1 a -> ShowS
[H1 a] -> ShowS
H1 a -> String
(Int -> H1 a -> ShowS)
-> (H1 a -> String) -> ([H1 a] -> ShowS) -> Show (H1 a)
forall a. Show a => Int -> H1 a -> ShowS
forall a. Show a => [H1 a] -> ShowS
forall a. Show a => H1 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> H1 a -> ShowS
showsPrec :: Int -> H1 a -> ShowS
$cshow :: forall a. Show a => H1 a -> String
show :: H1 a -> String
$cshowList :: forall a. Show a => [H1 a] -> ShowS
showList :: [H1 a] -> ShowS
Show)

data H2 a = H2 !a !a
  deriving ((forall a b. (a -> b) -> H2 a -> H2 b)
-> (forall a b. a -> H2 b -> H2 a) -> Functor H2
forall a b. a -> H2 b -> H2 a
forall a b. (a -> b) -> H2 a -> H2 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> H2 a -> H2 b
fmap :: forall a b. (a -> b) -> H2 a -> H2 b
$c<$ :: forall a b. a -> H2 b -> H2 a
<$ :: forall a b. a -> H2 b -> H2 a
Functor, (forall m. Monoid m => H2 m -> m)
-> (forall m a. Monoid m => (a -> m) -> H2 a -> m)
-> (forall m a. Monoid m => (a -> m) -> H2 a -> m)
-> (forall a b. (a -> b -> b) -> b -> H2 a -> b)
-> (forall a b. (a -> b -> b) -> b -> H2 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H2 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H2 a -> b)
-> (forall a. (a -> a -> a) -> H2 a -> a)
-> (forall a. (a -> a -> a) -> H2 a -> a)
-> (forall a. H2 a -> [a])
-> (forall a. H2 a -> Bool)
-> (forall a. H2 a -> Int)
-> (forall a. Eq a => a -> H2 a -> Bool)
-> (forall a. Ord a => H2 a -> a)
-> (forall a. Ord a => H2 a -> a)
-> (forall a. Num a => H2 a -> a)
-> (forall a. Num a => H2 a -> a)
-> Foldable H2
forall a. Eq a => a -> H2 a -> Bool
forall a. Num a => H2 a -> a
forall a. Ord a => H2 a -> a
forall m. Monoid m => H2 m -> m
forall a. H2 a -> Bool
forall a. H2 a -> Int
forall a. H2 a -> [a]
forall a. (a -> a -> a) -> H2 a -> a
forall m a. Monoid m => (a -> m) -> H2 a -> m
forall b a. (b -> a -> b) -> b -> H2 a -> b
forall a b. (a -> b -> b) -> b -> H2 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => H2 m -> m
fold :: forall m. Monoid m => H2 m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> H2 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> H2 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> H2 a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> H2 a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> H2 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> H2 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> H2 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> H2 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> H2 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> H2 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> H2 a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> H2 a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> H2 a -> a
foldr1 :: forall a. (a -> a -> a) -> H2 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> H2 a -> a
foldl1 :: forall a. (a -> a -> a) -> H2 a -> a
$ctoList :: forall a. H2 a -> [a]
toList :: forall a. H2 a -> [a]
$cnull :: forall a. H2 a -> Bool
null :: forall a. H2 a -> Bool
$clength :: forall a. H2 a -> Int
length :: forall a. H2 a -> Int
$celem :: forall a. Eq a => a -> H2 a -> Bool
elem :: forall a. Eq a => a -> H2 a -> Bool
$cmaximum :: forall a. Ord a => H2 a -> a
maximum :: forall a. Ord a => H2 a -> a
$cminimum :: forall a. Ord a => H2 a -> a
minimum :: forall a. Ord a => H2 a -> a
$csum :: forall a. Num a => H2 a -> a
sum :: forall a. Num a => H2 a -> a
$cproduct :: forall a. Num a => H2 a -> a
product :: forall a. Num a => H2 a -> a
Foldable, Functor H2
Foldable H2
(Functor H2, Foldable H2) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> H2 a -> f (H2 b))
-> (forall (f :: * -> *) a. Applicative f => H2 (f a) -> f (H2 a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> H2 a -> m (H2 b))
-> (forall (m :: * -> *) a. Monad m => H2 (m a) -> m (H2 a))
-> Traversable H2
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => H2 (m a) -> m (H2 a)
forall (f :: * -> *) a. Applicative f => H2 (f a) -> f (H2 a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> H2 a -> m (H2 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H2 a -> f (H2 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H2 a -> f (H2 b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H2 a -> f (H2 b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => H2 (f a) -> f (H2 a)
sequenceA :: forall (f :: * -> *) a. Applicative f => H2 (f a) -> f (H2 a)
$cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H2 a -> m (H2 b)
mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H2 a -> m (H2 b)
$csequence :: forall (m :: * -> *) a. Monad m => H2 (m a) -> m (H2 a)
sequence :: forall (m :: * -> *) a. Monad m => H2 (m a) -> m (H2 a)
Traversable, Int -> H2 a -> ShowS
[H2 a] -> ShowS
H2 a -> String
(Int -> H2 a -> ShowS)
-> (H2 a -> String) -> ([H2 a] -> ShowS) -> Show (H2 a)
forall a. Show a => Int -> H2 a -> ShowS
forall a. Show a => [H2 a] -> ShowS
forall a. Show a => H2 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> H2 a -> ShowS
showsPrec :: Int -> H2 a -> ShowS
$cshow :: forall a. Show a => H2 a -> String
show :: H2 a -> String
$cshowList :: forall a. Show a => [H2 a] -> ShowS
showList :: [H2 a] -> ShowS
Show)

data H3 a = H3 !a !a !a
  deriving ((forall a b. (a -> b) -> H3 a -> H3 b)
-> (forall a b. a -> H3 b -> H3 a) -> Functor H3
forall a b. a -> H3 b -> H3 a
forall a b. (a -> b) -> H3 a -> H3 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> H3 a -> H3 b
fmap :: forall a b. (a -> b) -> H3 a -> H3 b
$c<$ :: forall a b. a -> H3 b -> H3 a
<$ :: forall a b. a -> H3 b -> H3 a
Functor, (forall m. Monoid m => H3 m -> m)
-> (forall m a. Monoid m => (a -> m) -> H3 a -> m)
-> (forall m a. Monoid m => (a -> m) -> H3 a -> m)
-> (forall a b. (a -> b -> b) -> b -> H3 a -> b)
-> (forall a b. (a -> b -> b) -> b -> H3 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H3 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H3 a -> b)
-> (forall a. (a -> a -> a) -> H3 a -> a)
-> (forall a. (a -> a -> a) -> H3 a -> a)
-> (forall a. H3 a -> [a])
-> (forall a. H3 a -> Bool)
-> (forall a. H3 a -> Int)
-> (forall a. Eq a => a -> H3 a -> Bool)
-> (forall a. Ord a => H3 a -> a)
-> (forall a. Ord a => H3 a -> a)
-> (forall a. Num a => H3 a -> a)
-> (forall a. Num a => H3 a -> a)
-> Foldable H3
forall a. Eq a => a -> H3 a -> Bool
forall a. Num a => H3 a -> a
forall a. Ord a => H3 a -> a
forall m. Monoid m => H3 m -> m
forall a. H3 a -> Bool
forall a. H3 a -> Int
forall a. H3 a -> [a]
forall a. (a -> a -> a) -> H3 a -> a
forall m a. Monoid m => (a -> m) -> H3 a -> m
forall b a. (b -> a -> b) -> b -> H3 a -> b
forall a b. (a -> b -> b) -> b -> H3 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => H3 m -> m
fold :: forall m. Monoid m => H3 m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> H3 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> H3 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> H3 a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> H3 a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> H3 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> H3 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> H3 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> H3 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> H3 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> H3 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> H3 a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> H3 a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> H3 a -> a
foldr1 :: forall a. (a -> a -> a) -> H3 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> H3 a -> a
foldl1 :: forall a. (a -> a -> a) -> H3 a -> a
$ctoList :: forall a. H3 a -> [a]
toList :: forall a. H3 a -> [a]
$cnull :: forall a. H3 a -> Bool
null :: forall a. H3 a -> Bool
$clength :: forall a. H3 a -> Int
length :: forall a. H3 a -> Int
$celem :: forall a. Eq a => a -> H3 a -> Bool
elem :: forall a. Eq a => a -> H3 a -> Bool
$cmaximum :: forall a. Ord a => H3 a -> a
maximum :: forall a. Ord a => H3 a -> a
$cminimum :: forall a. Ord a => H3 a -> a
minimum :: forall a. Ord a => H3 a -> a
$csum :: forall a. Num a => H3 a -> a
sum :: forall a. Num a => H3 a -> a
$cproduct :: forall a. Num a => H3 a -> a
product :: forall a. Num a => H3 a -> a
Foldable, Functor H3
Foldable H3
(Functor H3, Foldable H3) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> H3 a -> f (H3 b))
-> (forall (f :: * -> *) a. Applicative f => H3 (f a) -> f (H3 a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> H3 a -> m (H3 b))
-> (forall (m :: * -> *) a. Monad m => H3 (m a) -> m (H3 a))
-> Traversable H3
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => H3 (m a) -> m (H3 a)
forall (f :: * -> *) a. Applicative f => H3 (f a) -> f (H3 a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> H3 a -> m (H3 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H3 a -> f (H3 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H3 a -> f (H3 b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H3 a -> f (H3 b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => H3 (f a) -> f (H3 a)
sequenceA :: forall (f :: * -> *) a. Applicative f => H3 (f a) -> f (H3 a)
$cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H3 a -> m (H3 b)
mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H3 a -> m (H3 b)
$csequence :: forall (m :: * -> *) a. Monad m => H3 (m a) -> m (H3 a)
sequence :: forall (m :: * -> *) a. Monad m => H3 (m a) -> m (H3 a)
Traversable, Int -> H3 a -> ShowS
[H3 a] -> ShowS
H3 a -> String
(Int -> H3 a -> ShowS)
-> (H3 a -> String) -> ([H3 a] -> ShowS) -> Show (H3 a)
forall a. Show a => Int -> H3 a -> ShowS
forall a. Show a => [H3 a] -> ShowS
forall a. Show a => H3 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> H3 a -> ShowS
showsPrec :: Int -> H3 a -> ShowS
$cshow :: forall a. Show a => H3 a -> String
show :: H3 a -> String
$cshowList :: forall a. Show a => [H3 a] -> ShowS
showList :: [H3 a] -> ShowS
Show)

data H4 a = H4 !a !a !a !a
  deriving ((forall a b. (a -> b) -> H4 a -> H4 b)
-> (forall a b. a -> H4 b -> H4 a) -> Functor H4
forall a b. a -> H4 b -> H4 a
forall a b. (a -> b) -> H4 a -> H4 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> H4 a -> H4 b
fmap :: forall a b. (a -> b) -> H4 a -> H4 b
$c<$ :: forall a b. a -> H4 b -> H4 a
<$ :: forall a b. a -> H4 b -> H4 a
Functor, (forall m. Monoid m => H4 m -> m)
-> (forall m a. Monoid m => (a -> m) -> H4 a -> m)
-> (forall m a. Monoid m => (a -> m) -> H4 a -> m)
-> (forall a b. (a -> b -> b) -> b -> H4 a -> b)
-> (forall a b. (a -> b -> b) -> b -> H4 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H4 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H4 a -> b)
-> (forall a. (a -> a -> a) -> H4 a -> a)
-> (forall a. (a -> a -> a) -> H4 a -> a)
-> (forall a. H4 a -> [a])
-> (forall a. H4 a -> Bool)
-> (forall a. H4 a -> Int)
-> (forall a. Eq a => a -> H4 a -> Bool)
-> (forall a. Ord a => H4 a -> a)
-> (forall a. Ord a => H4 a -> a)
-> (forall a. Num a => H4 a -> a)
-> (forall a. Num a => H4 a -> a)
-> Foldable H4
forall a. Eq a => a -> H4 a -> Bool
forall a. Num a => H4 a -> a
forall a. Ord a => H4 a -> a
forall m. Monoid m => H4 m -> m
forall a. H4 a -> Bool
forall a. H4 a -> Int
forall a. H4 a -> [a]
forall a. (a -> a -> a) -> H4 a -> a
forall m a. Monoid m => (a -> m) -> H4 a -> m
forall b a. (b -> a -> b) -> b -> H4 a -> b
forall a b. (a -> b -> b) -> b -> H4 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => H4 m -> m
fold :: forall m. Monoid m => H4 m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> H4 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> H4 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> H4 a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> H4 a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> H4 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> H4 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> H4 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> H4 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> H4 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> H4 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> H4 a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> H4 a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> H4 a -> a
foldr1 :: forall a. (a -> a -> a) -> H4 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> H4 a -> a
foldl1 :: forall a. (a -> a -> a) -> H4 a -> a
$ctoList :: forall a. H4 a -> [a]
toList :: forall a. H4 a -> [a]
$cnull :: forall a. H4 a -> Bool
null :: forall a. H4 a -> Bool
$clength :: forall a. H4 a -> Int
length :: forall a. H4 a -> Int
$celem :: forall a. Eq a => a -> H4 a -> Bool
elem :: forall a. Eq a => a -> H4 a -> Bool
$cmaximum :: forall a. Ord a => H4 a -> a
maximum :: forall a. Ord a => H4 a -> a
$cminimum :: forall a. Ord a => H4 a -> a
minimum :: forall a. Ord a => H4 a -> a
$csum :: forall a. Num a => H4 a -> a
sum :: forall a. Num a => H4 a -> a
$cproduct :: forall a. Num a => H4 a -> a
product :: forall a. Num a => H4 a -> a
Foldable, Functor H4
Foldable H4
(Functor H4, Foldable H4) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> H4 a -> f (H4 b))
-> (forall (f :: * -> *) a. Applicative f => H4 (f a) -> f (H4 a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> H4 a -> m (H4 b))
-> (forall (m :: * -> *) a. Monad m => H4 (m a) -> m (H4 a))
-> Traversable H4
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => H4 (m a) -> m (H4 a)
forall (f :: * -> *) a. Applicative f => H4 (f a) -> f (H4 a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> H4 a -> m (H4 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H4 a -> f (H4 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H4 a -> f (H4 b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H4 a -> f (H4 b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => H4 (f a) -> f (H4 a)
sequenceA :: forall (f :: * -> *) a. Applicative f => H4 (f a) -> f (H4 a)
$cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H4 a -> m (H4 b)
mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H4 a -> m (H4 b)
$csequence :: forall (m :: * -> *) a. Monad m => H4 (m a) -> m (H4 a)
sequence :: forall (m :: * -> *) a. Monad m => H4 (m a) -> m (H4 a)
Traversable, Int -> H4 a -> ShowS
[H4 a] -> ShowS
H4 a -> String
(Int -> H4 a -> ShowS)
-> (H4 a -> String) -> ([H4 a] -> ShowS) -> Show (H4 a)
forall a. Show a => Int -> H4 a -> ShowS
forall a. Show a => [H4 a] -> ShowS
forall a. Show a => H4 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> H4 a -> ShowS
showsPrec :: Int -> H4 a -> ShowS
$cshow :: forall a. Show a => H4 a -> String
show :: H4 a -> String
$cshowList :: forall a. Show a => [H4 a] -> ShowS
showList :: [H4 a] -> ShowS
Show)

data H5 a = H5 !a !a !a !a !a
  deriving ((forall a b. (a -> b) -> H5 a -> H5 b)
-> (forall a b. a -> H5 b -> H5 a) -> Functor H5
forall a b. a -> H5 b -> H5 a
forall a b. (a -> b) -> H5 a -> H5 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> H5 a -> H5 b
fmap :: forall a b. (a -> b) -> H5 a -> H5 b
$c<$ :: forall a b. a -> H5 b -> H5 a
<$ :: forall a b. a -> H5 b -> H5 a
Functor, (forall m. Monoid m => H5 m -> m)
-> (forall m a. Monoid m => (a -> m) -> H5 a -> m)
-> (forall m a. Monoid m => (a -> m) -> H5 a -> m)
-> (forall a b. (a -> b -> b) -> b -> H5 a -> b)
-> (forall a b. (a -> b -> b) -> b -> H5 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H5 a -> b)
-> (forall b a. (b -> a -> b) -> b -> H5 a -> b)
-> (forall a. (a -> a -> a) -> H5 a -> a)
-> (forall a. (a -> a -> a) -> H5 a -> a)
-> (forall a. H5 a -> [a])
-> (forall a. H5 a -> Bool)
-> (forall a. H5 a -> Int)
-> (forall a. Eq a => a -> H5 a -> Bool)
-> (forall a. Ord a => H5 a -> a)
-> (forall a. Ord a => H5 a -> a)
-> (forall a. Num a => H5 a -> a)
-> (forall a. Num a => H5 a -> a)
-> Foldable H5
forall a. Eq a => a -> H5 a -> Bool
forall a. Num a => H5 a -> a
forall a. Ord a => H5 a -> a
forall m. Monoid m => H5 m -> m
forall a. H5 a -> Bool
forall a. H5 a -> Int
forall a. H5 a -> [a]
forall a. (a -> a -> a) -> H5 a -> a
forall m a. Monoid m => (a -> m) -> H5 a -> m
forall b a. (b -> a -> b) -> b -> H5 a -> b
forall a b. (a -> b -> b) -> b -> H5 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => H5 m -> m
fold :: forall m. Monoid m => H5 m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> H5 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> H5 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> H5 a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> H5 a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> H5 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> H5 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> H5 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> H5 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> H5 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> H5 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> H5 a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> H5 a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> H5 a -> a
foldr1 :: forall a. (a -> a -> a) -> H5 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> H5 a -> a
foldl1 :: forall a. (a -> a -> a) -> H5 a -> a
$ctoList :: forall a. H5 a -> [a]
toList :: forall a. H5 a -> [a]
$cnull :: forall a. H5 a -> Bool
null :: forall a. H5 a -> Bool
$clength :: forall a. H5 a -> Int
length :: forall a. H5 a -> Int
$celem :: forall a. Eq a => a -> H5 a -> Bool
elem :: forall a. Eq a => a -> H5 a -> Bool
$cmaximum :: forall a. Ord a => H5 a -> a
maximum :: forall a. Ord a => H5 a -> a
$cminimum :: forall a. Ord a => H5 a -> a
minimum :: forall a. Ord a => H5 a -> a
$csum :: forall a. Num a => H5 a -> a
sum :: forall a. Num a => H5 a -> a
$cproduct :: forall a. Num a => H5 a -> a
product :: forall a. Num a => H5 a -> a
Foldable, Functor H5
Foldable H5
(Functor H5, Foldable H5) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> H5 a -> f (H5 b))
-> (forall (f :: * -> *) a. Applicative f => H5 (f a) -> f (H5 a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> H5 a -> m (H5 b))
-> (forall (m :: * -> *) a. Monad m => H5 (m a) -> m (H5 a))
-> Traversable H5
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => H5 (m a) -> m (H5 a)
forall (f :: * -> *) a. Applicative f => H5 (f a) -> f (H5 a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> H5 a -> m (H5 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H5 a -> f (H5 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H5 a -> f (H5 b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> H5 a -> f (H5 b)
$csequenceA :: forall (f :: * -> *) a. Applicative f => H5 (f a) -> f (H5 a)
sequenceA :: forall (f :: * -> *) a. Applicative f => H5 (f a) -> f (H5 a)
$cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H5 a -> m (H5 b)
mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> H5 a -> m (H5 b)
$csequence :: forall (m :: * -> *) a. Monad m => H5 (m a) -> m (H5 a)
sequence :: forall (m :: * -> *) a. Monad m => H5 (m a) -> m (H5 a)
Traversable, Int -> H5 a -> ShowS
[H5 a] -> ShowS
H5 a -> String
(Int -> H5 a -> ShowS)
-> (H5 a -> String) -> ([H5 a] -> ShowS) -> Show (H5 a)
forall a. Show a => Int -> H5 a -> ShowS
forall a. Show a => [H5 a] -> ShowS
forall a. Show a => H5 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> H5 a -> ShowS
showsPrec :: Int -> H5 a -> ShowS
$cshow :: forall a. Show a => H5 a -> String
show :: H5 a -> String
$cshowList :: forall a. Show a => [H5 a] -> ShowS
showList :: [H5 a] -> ShowS
Show)

curryH1 :: (H1 a -> a) -> a -> a
curryH1 :: forall a. (H1 a -> a) -> a -> a
curryH1 H1 a -> a
f a
x = H1 a -> a
f (a -> H1 a
forall a. a -> H1 a
H1 a
x)
{-# INLINE curryH1 #-}

curryH2 :: (H2 a -> a) -> a -> a -> a
curryH2 :: forall a. (H2 a -> a) -> a -> a -> a
curryH2 H2 a -> a
f a
x a
y = H2 a -> a
f (a -> a -> H2 a
forall a. a -> a -> H2 a
H2 a
x a
y)
{-# INLINE curryH2 #-}

curryH3 :: (H3 a -> a) -> a -> a -> a -> a
curryH3 :: forall a. (H3 a -> a) -> a -> a -> a -> a
curryH3 H3 a -> a
f a
x a
y a
z = H3 a -> a
f (a -> a -> a -> H3 a
forall a. a -> a -> a -> H3 a
H3 a
x a
y a
z)
{-# INLINE curryH3 #-}

curryH4 :: (H4 a -> a) -> a -> a -> a -> a -> a
curryH4 :: forall a. (H4 a -> a) -> a -> a -> a -> a -> a
curryH4 H4 a -> a
f a
x a
y a
z a
a = H4 a -> a
f (a -> a -> a -> a -> H4 a
forall a. a -> a -> a -> a -> H4 a
H4 a
x a
y a
z a
a)
{-# INLINE curryH4 #-}

curryH5 :: (H5 a -> a) -> a -> a -> a -> a -> a -> a
curryH5 :: forall a. (H5 a -> a) -> a -> a -> a -> a -> a -> a
curryH5 H5 a -> a
f a
x a
y a
z a
a a
b = H5 a -> a
f (a -> a -> a -> a -> a -> H5 a
forall a. a -> a -> a -> a -> a -> H5 a
H5 a
x a
y a
z a
a a
b)
{-# INLINE curryH5 #-}

uncurryH1 :: (a -> a) -> H1 a -> a
uncurryH1 :: forall a. (a -> a) -> H1 a -> a
uncurryH1 a -> a
f (H1 a
x) = a -> a
f a
x
{-# INLINE uncurryH1 #-}

uncurryH2 :: (a -> a -> a) -> H2 a -> a
uncurryH2 :: forall a. (a -> a -> a) -> H2 a -> a
uncurryH2 a -> a -> a
f (H2 a
x a
y) = a -> a -> a
f a
x a
y
{-# INLINE uncurryH2 #-}

uncurryH3 :: (a -> a -> a -> a) -> H3 a -> a
uncurryH3 :: forall a. (a -> a -> a -> a) -> H3 a -> a
uncurryH3 a -> a -> a -> a
f (H3 a
x a
y a
z) = a -> a -> a -> a
f a
x a
y a
z
{-# INLINE uncurryH3 #-}

uncurryH4 :: (a -> a -> a -> a -> a) -> H4 a -> a
uncurryH4 :: forall a. (a -> a -> a -> a -> a) -> H4 a -> a
uncurryH4 a -> a -> a -> a -> a
f (H4 a
x a
y a
z a
a) = a -> a -> a -> a -> a
f a
x a
y a
z a
a
{-# INLINE uncurryH4 #-}

uncurryH5 :: (a -> a -> a -> a -> a -> a) -> H5 a -> a
uncurryH5 :: forall a. (a -> a -> a -> a -> a -> a) -> H5 a -> a
uncurryH5 a -> a -> a -> a -> a -> a
f (H5 a
x a
y a
z a
a a
b) = a -> a -> a -> a -> a -> a
f a
x a
y a
z a
a a
b
{-# INLINE uncurryH5 #-}