diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -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
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -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 ..]
diff --git a/homotuple.cabal b/homotuple.cabal
--- a/homotuple.cabal
+++ b/homotuple.cabal
@@ -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
diff --git a/src/Data/Tuple/Homotuple.hs b/src/Data/Tuple/Homotuple.hs
deleted file mode 100644
--- a/src/Data/Tuple/Homotuple.hs
+++ /dev/null
@@ -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
