homotuple 0.1.1.0 → 0.1.2.0
raw patch · 4 files changed
+100/−353 lines, 4 filesbuild-type:Customsetup-changed
Files
- ChangeLog.md +6/−0
- Setup.hs +85/−2
- homotuple.cabal +9/−2
- src/Data/Tuple/Homotuple.hs +0/−349
ChangeLog.md view
@@ -1,5 +1,11 @@ # Changelog for homotuple +## 0.1.2.0++2020.06.13++Add implementations until 62-tuple.+ ## 0.1.1.0 2020.05.26
Setup.hs view
@@ -1,2 +1,85 @@-import Distribution.Simple-main = defaultMain+import Prelude hiding (head, init, last, reverse, tail)+import qualified Prelude++import Data.Char (isDigit)+import Data.Foldable (for_)+import Data.List (intercalate, intersperse, isPrefixOf, replicate, stripPrefix)+import Distribution.Simple (Args, UserHooks (preBuild), defaultMainWithHooks, simpleUserHooks)+import Distribution.Simple.Setup (BuildFlags)+import Distribution.Types.HookedBuildInfo (HookedBuildInfo, emptyHookedBuildInfo)+import System.Directory (copyFile, createDirectoryIfMissing, getTemporaryDirectory, removeFile)+import System.IO (Handle, IOMode (ReadMode), hClose, hGetLine, hIsEOF, hPutStrLn,+ hSetNewlineMode, noNewlineTranslation, openTempFile, stdin, withFile)++main :: IO ()+main =+ defaultMainWithHooks+ simpleUserHooks+ { preBuild = preProcessListTuple }++preProcessListTuple :: Args -> BuildFlags -> IO HookedBuildInfo+preProcessListTuple _ _ = do+ let+ dir = "src/Data/Tuple"+ file = "Homotuple.hs"+ srcPath = dir ++ "/" ++ file+ templatePath = "template/Homotuple.hs"+ templateItemPath = "template/HomotupleItem.hs"+ tempPath <-+ withFile templatePath ReadMode $ \template -> do+ tempDir <- (++ "/homotuple") <$> getTemporaryDirectory+ createDirectoryIfMissing True tempDir+ (tempPath, temp) <- openTempFile tempDir file+ putStrLn $ "temporaly file: " ++ tempPath+ hSetNewlineMode template noNewlineTranslation+ hSetNewlineMode temp noNewlineTranslation+ hSetNewlineMode stdin noNewlineTranslation+ templateItem <- lines <$> readFile templateItemPath+ loop template temp templateItem+ hClose temp+ pure tempPath+ copyFile tempPath srcPath+ removeFile tempPath+ pure emptyHookedBuildInfo+ where+ loop :: Handle -> Handle -> [String] -> IO ()+ loop template temp templateItem =+ go+ where+ go = do+ eof <- hIsEOF template+ if eof+ then pure ()+ else do+ line <- hGetLine template+ for_ (preprocess line templateItem) (hPutStrLn temp)+ go++ preprocess :: String -> [String] -> [String]+ preprocess line templateItem+ | Just rest <- stripPrefix "---- embed " line+ , let n = read $ takeWhile isDigit rest+ = embed n templateItem+ | otherwise = [line]++ embed :: Word -> [String] -> [String]+ embed l templateItem+ | l >= 2 = concatMap go templateItem+ | otherwise = error "length must be larger than or equal to 2"+ where+ go "" = [""]+ go t+ | Just rest <- stripPrefix "<homotuple>" t = [homotuple ++ Prelude.head (go rest)]+ | Just rest <- stripPrefix "<tuple>" t = [tuple ++ Prelude.head (go rest)]+ | Just rest <- stripPrefix "<list>" t = [list ++ Prelude.head (go rest)]+ | Just rest <- stripPrefix "<length>" t = [length ++ Prelude.head (go rest)]+ | Just rest <- stripPrefix "<" t = error $ "unknown tag: " ++ takeWhile (/= '>') rest+ | (s, rest) <- span (/= '<') t = [s ++ Prelude.head (go rest)]+ n = fromIntegral l+ homotuple = paren $ replicate n "a"+ tuple = paren $ take n i012+ list = bracket $ take n i012+ length = show l+ paren xs = "(" ++ intercalate ", " xs ++ ")"+ bracket xs = "[" ++ intercalate ", " xs ++ "]"+ i012 = ('i':) . show <$> [0 ..]
homotuple.cabal view
@@ -1,7 +1,7 @@ cabal-version: 1.12 name: homotuple-version: 0.1.1.0+version: 0.1.2.0 synopsis: Homotuple, all whose elements are the same type description: Homotuple, all whose elements are the same type category: Data@@ -12,7 +12,7 @@ copyright: 2019 Kazuki Okamoto license: Apache-2.0 license-file: LICENSE-build-type: Simple+build-type: Custom extra-source-files: README.md@@ -22,11 +22,18 @@ type: git location: https://github.com/kakkun61/homotuple +custom-setup+ setup-depends:+ Cabal+ , base+ , directory+ library exposed-modules: Data.Tuple.Homotuple Data.Tuple.Homotuple.Identity Data.Tuple.Homotuple.OneTuple Data.Tuple.Homotuple.Only+ autogen-modules: Data.Tuple.Homotuple hs-source-dirs: src ghc-options: -Wall -Wcompat
− src/Data/Tuple/Homotuple.hs
@@ -1,349 +0,0 @@-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE Trustworthy #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeFamilyDependencies #-}-{-# LANGUAGE TypeOperators #-}--{-# OPTIONS_GHC -Wno-orphans #-}--{-# OPTIONS_HADDOCK show-extensions #-}---- |--- Copyright : Kazuki Okamoto--- License : see LICENSE--- Maintainer : kazuki.okamoto@kakkun61.com--- Stability : experimental--- Portability : GHC------ Homotuples, whoes items are the same type or which are lists with type-level length.--module Data.Tuple.Homotuple- ( Homotuple- -- * List-like- , replicate- -- * Functor-like- , (<$>)- -- * Applicative-like- , (<*>)- , pure- -- * Monad-like- , (>>=)- -- * Semigoupe-like- , (<>)- -- * Monoid-like- , pattern Empty- -- * Utility constraints- , IsHomolisttuple- , IsHomotupleItem- -- * For implementers- , errorLengthMismatch- ) where--import Prelude (Num (fromInteger), error, ($), (.))--import qualified Control.Applicative as A-import qualified Control.Monad as M-import Data.Kind (Type)-import qualified Data.List as L-import Data.Proxy (Proxy (Proxy))-import qualified Data.Semigroup as S-import Data.Tuple.Single (Single (wrap))-import GHC.Exts (IsList (Item, fromList, toList))-import GHC.Stack (HasCallStack)-import GHC.TypeLits (type (*), type (+), KnownNat, Nat, natVal)--type family Homotuple (n :: Nat) (a :: Type) = (t :: Type) | t -> n--type instance Homotuple 0 a = Proxy a--type instance Homotuple 2 a = (a, a)--type instance Homotuple 3 a = (a, a, a)--type instance Homotuple 4 a = (a, a, a, a)--type instance Homotuple 5 a = (a, a, a, a, a)--type instance Homotuple 6 a = (a, a, a, a, a, a)--type instance Homotuple 7 a = (a, a, a, a, a, a, a)--type instance Homotuple 8 a = (a, a, a, a, a, a, a, a)--type instance Homotuple 9 a = (a, a, a, a, a, a, a, a, a)--type instance Homotuple 10 a = (a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 11 a = (a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 12 a = (a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 13 a = (a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 14 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 15 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 16 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 17 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 18 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 19 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 20 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 21 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 22 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 23 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 24 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 25 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 26 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 27 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 28 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 29 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 30 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 31 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 32 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 33 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 34 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 35 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 36 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 37 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 38 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 39 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 40 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 41 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 42 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 43 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 44 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 45 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 46 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 47 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 48 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 49 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 50 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 51 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 52 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 53 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 54 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 55 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 56 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 57 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 58 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 59 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 60 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 61 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--type instance Homotuple 62 a = (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)--instance IsList (Proxy a) where- type Item (Proxy a) = a- fromList [] = Proxy- fromList _ = errorLengthMismatch- toList _ = []--instance IsList (a, a) where- type Item (a, a) = a- fromList [a, b] = (a, b)- fromList _ = errorLengthMismatch- toList (a, b) = [a, b]--instance IsList (a, a, a) where- type Item (a, a, a) = a- fromList [a, b, c] = (a, b, c)- fromList _ = errorLengthMismatch- toList (a, b, c) = [a, b, c]--instance IsList (a, a, a, a) where- type Item (a, a, a, a) = a- fromList [a, b, c, d] = (a, b, c, d)- fromList _ = errorLengthMismatch- toList (a, b, c, d) = [a, b, c, d]--instance IsList (a, a, a, a, a) where- type Item (a, a, a, a, a) = a- fromList [a, b, c, d, e] = (a, b, c, d, e)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e) = [a, b, c, d, e]--instance IsList (a, a, a, a, a, a) where- type Item (a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f] = (a, b, c, d, e, f)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f) = [a, b, c, d, e, f]--instance IsList (a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g] = (a, b, c, d, e, f, g)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g) = [a, b, c, d, e, f, g]--instance IsList (a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h] = (a, b, c, d, e, f, g, h)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h) = [a, b, c, d, e, f, g, h]--instance IsList (a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i] = (a, b, c, d, e, f, g, h, i)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i) = [a, b, c, d, e, f, g, h, i]--instance IsList (a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j] = (a, b, c, d, e, f, g, h, i, j)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j) = [a, b, c, d, e, f, g, h, i, j]--instance IsList (a, a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j, k] = (a, b, c, d, e, f, g, h, i, j, k)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j, k) = [a, b, c, d, e, f, g, h, i, j, k]--instance IsList (a, a, a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j, k, l] = (a, b, c, d, e, f, g, h, i, j, k, l)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j, k, l) = [a, b, c, d, e, f, g, h, i, j, k, l]--instance IsList (a, a, a, a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j, k, l, m] = (a, b, c, d, e, f, g, h, i, j, k, l, m)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j, k, l, m) = [a, b, c, d, e, f, g, h, i, j, k, l, m]--instance IsList (a, a, a, a, a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j, k, l, m, n] = (a, b, c, d, e, f, g, h, i, j, k, l, m, n)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]--instance IsList (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a) where- type Item (a, a, a, a, a, a, a, a, a, a, a, a, a, a, a) = a- fromList [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o] = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)- fromList _ = errorLengthMismatch- toList (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o]--errorLengthMismatch :: HasCallStack => a-errorLengthMismatch = error "length mismatch"---- Utility constraints--type IsHomolisttuple (n :: Nat) a = IsList (Homotuple n a)-type IsHomotupleItem (n :: Nat) a = a ~ Item (Homotuple n a)---- List-like--replicate :: forall (n :: Nat) a. (IsHomolisttuple n a, IsHomotupleItem n a, KnownNat n) => a -> Homotuple n a-replicate = fromList . L.replicate (fromInteger $ natVal (Proxy :: Proxy n))---- Functor-like--(<$>)- :: ( IsHomolisttuple n a- , IsHomolisttuple n b- , IsHomotupleItem n a- , IsHomotupleItem n b- )- => (a -> b) -> Homotuple n a -> Homotuple n b-f <$> t = fromList $ L.map f $ toList t---- Applicative-like--(<*>)- :: ( IsHomolisttuple n0 (a -> b)- , IsHomolisttuple n1 a- , IsHomolisttuple (n0 * n1) b- , IsHomotupleItem n0 (a -> b)- , IsHomotupleItem n1 a- , IsHomotupleItem (n0 * n1) b- )- => Homotuple n0 (a -> b) -> Homotuple n1 a -> Homotuple (n0 * n1) b-f <*> t = fromList $ toList f A.<*> toList t--pure :: Single c => a -> c a-pure = wrap---- Monad-like--(>>=)- :: ( IsHomolisttuple n0 a- , IsHomolisttuple n1 b- , IsHomolisttuple (n0 * n1) b- , IsHomotupleItem n0 a- , IsHomotupleItem n1 b- , IsHomotupleItem (n0 * n1) b- )- => Homotuple n0 a -> (a -> Homotuple n1 b) -> Homotuple (n0 * n1) b-m >>= f = fromList $ toList m M.>>= (toList . f)---- Semigroup-like--(<>)- :: ( IsHomolisttuple n0 a- , IsHomolisttuple n1 a- , IsHomolisttuple (n0 + n1) a- , IsHomotupleItem n0 a- , IsHomotupleItem n1 a- , IsHomotupleItem (n0 + n1) a- )- => Homotuple n0 a- -> Homotuple n1 a- -> Homotuple (n0 + n1) a-a <> b = fromList $ toList a S.<> toList b--infixr 6 <>---- Monoid-like--pattern Empty :: Homotuple 0 a-pattern Empty = Proxy