module Hat.List
  (gelemIndex,aelemIndex,helemIndex,gelemIndices,aelemIndices,helemIndices,gfind
    ,afind,hfind,gfindIndex,afindIndex,hfindIndex,gfindIndices,afindIndices
    ,hfindIndices,gnub,gnubBy,anubBy,hnubBy,gdelete,gdeleteBy,adeleteBy
    ,hdeleteBy,(!\\),gdeleteFirstsBy,adeleteFirstsBy,hdeleteFirstsBy,gunion
    ,gunionBy,aunionBy,hunionBy,gintersect,gintersectBy,aintersectBy
    ,hintersectBy,gintersperse,aintersperse,hintersperse,gtranspose,atranspose
    ,htranspose,gpartition,apartition,hpartition,ggroup,ggroupBy,agroupBy
    ,hgroupBy,ginits,ainits,hinits,gtails,atails,htails,gisPrefixOf,aisPrefixOf
    ,hisPrefixOf,gisSuffixOf,aisSuffixOf,hisSuffixOf,gmapAccumL,amapAccumL
    ,hmapAccumL,gmapAccumR,amapAccumR,hmapAccumR,gsort,gsortBy,asortBy,hsortBy
    ,ginsert,ginsertBy,ainsertBy,hinsertBy,gmaximumBy,amaximumBy,hmaximumBy
    ,gminimumBy,aminimumBy,hminimumBy,ggenericLength,agenericLength
    ,hgenericLength,ggenericTake,agenericTake,hgenericTake,ggenericDrop
    ,agenericDrop,hgenericDrop,ggenericSplitAt,agenericSplitAt,hgenericSplitAt
    ,ggenericIndex,agenericIndex,hgenericIndex,ggenericReplicate
    ,agenericReplicate,hgenericReplicate,gzip4,gzip5,gzip6,gzip7,gzipWith4
    ,azipWith4,hzipWith4,gzipWith5,azipWith5,hzipWith5,gzipWith6,azipWith6
    ,hzipWith6,gzipWith7,azipWith7,hzipWith7,gunzip4,gunzip5,gunzip6,gunzip7
    ,gunfoldr,aunfoldr,hunfoldr,gmap,amap,hmap,(!++),(+++),(*++),gconcat,aconcat
    ,hconcat,gfilter,afilter,hfilter,ghead,ahead,hhead,glast,alast,hlast,gtail
    ,atail,htail,ginit,ainit,hinit,gnull,anull,hnull,glength,alength,hlength
    ,(!!!),(+!!),(*!!),gfoldl,afoldl,hfoldl,gfoldl1,afoldl1,hfoldl1,gscanl
    ,ascanl,hscanl,gscanl1,ascanl1,hscanl1,gfoldr,afoldr,hfoldr,gfoldr1,afoldr1
    ,hfoldr1,gscanr,ascanr,hscanr,gscanr1,ascanr1,hscanr1,giterate,aiterate
    ,hiterate,grepeat,arepeat,hrepeat,greplicate,areplicate,hreplicate,gcycle
    ,acycle,hcycle,gtake,atake,htake,gdrop,adrop,hdrop,gsplitAt,asplitAt
    ,hsplitAt,gtakeWhile,atakeWhile,htakeWhile,gdropWhile,adropWhile,hdropWhile
    ,gspan,aspan,hspan,gbreak,abreak,hbreak,glines,alines,hlines,gwords,awords
    ,hwords,gunlines,gunwords,aunwords,hunwords,greverse,gand,gor,gany,aany,hany
    ,gall,aall,hall,gelem,aelem,helem,gnotElem,anotElem,hnotElem,glookup,alookup
    ,hlookup,gsum,gproduct,gmaximum,amaximum,hmaximum,gminimum,aminimum,hminimum
    ,gconcatMap,aconcatMap,hconcatMap,gzip,gzip3,gzipWith,azipWith,hzipWith
    ,gzipWith3,azipWith3,hzipWith3,gunzip,gunzip3) where

import qualified Hat.PreludeBasic 
import qualified Prelude 
import Hat.Hack 
import qualified Hat.Hat as T 
import Hat.Hat  (WrapVal(wrapVal))
import Hat.Prelude 
import Hat.Maybe  (glistToMaybe,alistToMaybe,hlistToMaybe)

gelemIndex ::
  Eq a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List a) (Maybe Int)))

helemIndex :: Eq a => (T.R a) -> T.RefExp -> T.R (T.Fun (T.List a) (Maybe Int))

gelemIndex pelemIndex p = T.ufun1 aelemIndex pelemIndex p helemIndex

helemIndex fx p =
  T.uwrapForward p
    (hfindIndex (T.uap1 T.mkNoSrcPos p (T.mkNoSrcPos !== p) fx) p)

gelemIndices ::
  Eq a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List a) (T.List Int)))

helemIndices ::
  Eq a => (T.R a) -> T.RefExp -> T.R (T.Fun (T.List a) (T.List Int))

gelemIndices pelemIndices p = T.ufun1 aelemIndices pelemIndices p helemIndices

helemIndices fx p =
  T.uap1 T.mkNoSrcPos p (gfindIndices T.mkNoSrcPos p)
    (T.uap1 T.mkNoSrcPos p (T.mkNoSrcPos !== p) fx)

gfind ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.Fun a Bool) (T.Fun (T.List a) (Maybe a)))

hfind :: (T.R (T.Fun a Bool)) -> T.RefExp -> T.R (T.Fun (T.List a) (Maybe a))

gfind pfind p = T.ufun1 afind pfind p hfind

hfind fp p =
  T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (glistToMaybe T.mkNoSrcPos p)
    (T.uap1 T.mkNoSrcPos p (gfilter T.mkNoSrcPos p) fp)

gfindIndex ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.Fun a Bool) (T.Fun (T.List a) (Maybe Int)))

hfindIndex ::
  (T.R (T.Fun a Bool)) -> T.RefExp -> T.R (T.Fun (T.List a) (Maybe Int))

gfindIndex pfindIndex p = T.ufun1 afindIndex pfindIndex p hfindIndex

hfindIndex fp p =
  T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (glistToMaybe T.mkNoSrcPos p)
    (T.uap1 T.mkNoSrcPos p (gfindIndices T.mkNoSrcPos p) fp)

gfindIndices ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.Fun a Bool) (T.Fun (T.List a) (T.List Int)))

hfindIndices ::
  (T.R (T.Fun a Bool)) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List Int)

gfindIndices pfindIndices p = T.ufun2 afindIndices pfindIndices p hfindIndices

hfindIndices fp fxs p =
  T.uap1 T.mkNoSrcPos p
    (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p)
      (T.ufun2 T.mkLambda T.mkNoSrcPos p
        (\ f_x f_y p ->
          T.uccase T.mkNoSrcPos p
            (let
              v0v0v0v0v1 (T.R (T.Tuple2 fx fi) _) p =
                T.uap1 T.mkNoSrcPos p
                  (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_filter T.mkNoSrcPos p)
                    (T.uap1 T.mkNoSrcPos p fp fx)
                    (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fi)) f_y
              v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1))
            f_x))
      (T.uap2 T.mkNoSrcPos p (gzip T.mkNoSrcPos p) fxs
        (T.uap1 T.mkNoSrcPos p (Hat.Prelude.genumFrom T.mkNoSrcPos p)
          (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
            (T.conInteger T.mkNoSrcPos p 0)))))
    (T.fromExpList T.mkNoSrcPos p [])

gnub :: Eq a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.List a))

snub :: Eq a => T.R (T.Fun (T.List a) (T.List a))

gnub pnub p = T.uconstUse pnub p snub

snub =
  T.uconstDef T.mkRoot anub
    (\ p -> T.uap1 T.mkNoSrcPos p (gnubBy T.mkNoSrcPos p) (T.mkNoSrcPos !== p))

gnubBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R (T.Fun (T.Fun a (T.Fun a Bool)) (T.Fun (T.List a) (T.List a)))

hnubBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

gnubBy pnubBy p = T.ufun2 anubBy pnubBy p hnubBy

hnubBy feq (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
hnubBy feq (T.R (T.Cons fx fxs) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons fx
    (T.uwrapForward p
      (hnubBy feq
        (T.uwrapForward p
          (hfilter
            (T.ufun1 T.mkLambda T.mkNoSrcPos p
              (\ fy p ->
                T.uwrapForward p (hnot (T.uap2 T.mkNoSrcPos p feq fx fy) p)))
            fxs p)) p))
hnubBy _ _ p = T.fatal p

gdelete ::
  Eq a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List a) (T.List a)))

sdelete :: Eq a => T.R (T.Fun a (T.Fun (T.List a) (T.List a)))

gdelete pdelete p = T.uconstUse pdelete p sdelete

sdelete =
  T.uconstDef T.mkRoot adelete
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gdeleteBy T.mkNoSrcPos p) (T.mkNoSrcPos !== p))

gdeleteBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Bool)) (T.Fun a (T.Fun (T.List a) (T.List a))))

hdeleteBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    (T.R a) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

gdeleteBy pdeleteBy p = T.ufun3 adeleteBy pdeleteBy p hdeleteBy

hdeleteBy feq fx (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
hdeleteBy feq fx (T.R (T.Cons fy fys) _) p =
  T.ucif p (T.uap2 T.mkNoSrcPos p feq fx fy) (T.projection T.mkNoSrcPos p fys)
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fy
      (T.uwrapForward p (hdeleteBy feq fx fys p)))
hdeleteBy _ _ _ p = T.fatal p

(!\\) ::
  Eq a =>
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

(|\\) :: Eq a => T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

(!\\) (%\\) p = T.uconstUse (%\\) p (|\\)

(|\\) =
  T.uconstDef T.mkRoot (+\\)
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gfoldl T.mkNoSrcPos p)
        (T.uap1 T.mkNoSrcPos p (gflip T.mkNoSrcPos p) (gdelete T.mkNoSrcPos p)))

gdeleteFirstsBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Bool))
          (T.Fun (T.List a) (T.Fun (T.List a) (T.List a))))

hdeleteFirstsBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

gdeleteFirstsBy pdeleteFirstsBy p =
  T.ufun1 adeleteFirstsBy pdeleteFirstsBy p hdeleteFirstsBy

hdeleteFirstsBy feq p =
  T.uap1 T.mkNoSrcPos p (gfoldl T.mkNoSrcPos p)
    (T.uap1 T.mkNoSrcPos p (gflip T.mkNoSrcPos p)
      (T.uap1 T.mkNoSrcPos p (gdeleteBy T.mkNoSrcPos p) feq))

gunion ::
  Eq a =>
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

sunion :: Eq a => T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

gunion punion p = T.uconstUse punion p sunion

sunion =
  T.uconstDef T.mkRoot aunion
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gunionBy T.mkNoSrcPos p) (T.mkNoSrcPos !== p))

gunionBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Bool))
          (T.Fun (T.List a) (T.Fun (T.List a) (T.List a))))

hunionBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    (T.R (T.List a)) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

gunionBy punionBy p = T.ufun3 aunionBy punionBy p hunionBy

hunionBy feq fxs fys p =
  T.uwrapForward p
    ((fxs
        *++
        (T.uap3 T.mkNoSrcPos p (gdeleteFirstsBy T.mkNoSrcPos p) feq
          (T.uwrapForward p (hnubBy feq fys p)) fxs)) p)

gintersect ::
  Eq a =>
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

sintersect :: Eq a => T.R (T.Fun (T.List a) (T.Fun (T.List a) (T.List a)))

gintersect pintersect p = T.uconstUse pintersect p sintersect

sintersect =
  T.uconstDef T.mkRoot aintersect
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gintersectBy T.mkNoSrcPos p) (T.mkNoSrcPos !== p))

gintersectBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Bool))
          (T.Fun (T.List a) (T.Fun (T.List a) (T.List a))))

hintersectBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    (T.R (T.List a)) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

gintersectBy pintersectBy p = T.ufun3 aintersectBy pintersectBy p hintersectBy

hintersectBy feq fxs fys p =
  T.uap1 T.mkNoSrcPos p
    (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p)
      (T.ufun2 T.mkLambda T.mkNoSrcPos p
        (\ f_x f_y p ->
          T.uccase T.mkNoSrcPos p
            (let
              v0v0v0v0v1 fx p =
                T.uap1 T.mkNoSrcPos p
                  (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_filter T.mkNoSrcPos p)
                    (T.uap2 T.mkNoSrcPos p (gany T.mkNoSrcPos p)
                      (T.uap1 T.mkNoSrcPos p feq fx) fys)
                    (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fx)) f_y
              v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1))
            f_x)) fxs) (T.fromExpList T.mkNoSrcPos p [])

gintersperse ::
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List a) (T.List a)))

hintersperse :: (T.R a) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

gintersperse pintersperse p = T.ufun2 aintersperse pintersperse p hintersperse

hintersperse fsep (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
hintersperse fsep (T.R (T.Cons fx (T.R T.List _)) _) p =
  T.fromExpList T.mkNoSrcPos p [fx]
hintersperse fsep (T.R (T.Cons fx fxs) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons fx
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fsep
      (T.uwrapForward p (hintersperse fsep fxs p)))
hintersperse _ _ p = T.fatal p

gtranspose ::
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List (T.List a)) (T.List (T.List a)))

htranspose :: (T.R (T.List (T.List a))) -> T.RefExp -> T.R (T.List (T.List a))

gtranspose ptranspose p = T.ufun1 atranspose ptranspose p htranspose

htranspose (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
htranspose (T.R (T.Cons (T.R T.List _) fxss) _) p =
  T.uwrapForward p (htranspose fxss p)
htranspose (T.R (T.Cons (T.R (T.Cons fx fxs) _) fxss) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fx
      (T.uap1 T.mkNoSrcPos p
        (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p)
          (T.ufun2 T.mkLambda T.mkNoSrcPos p
            (\ f_x f_y p ->
              T.uccase T.mkNoSrcPos p
                (let
                  v0v0v0v0v1 (T.R (T.Cons fh ft) _) p =
                    T.uap1 T.mkNoSrcPos p
                      (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fh) f_y
                  v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in
                  (v0v0v0v0v1)) f_x)) fxss) (T.fromExpList T.mkNoSrcPos p [])))
    (T.uwrapForward p
      (htranspose
        (T.con2 T.mkNoSrcPos p T.Cons T.aCons fxs
          (T.uap1 T.mkNoSrcPos p
            (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p)
              (T.ufun2 T.mkLambda T.mkNoSrcPos p
                (\ f_x f_y p ->
                  T.uccase T.mkNoSrcPos p
                    (let
                      v0v0v0v0v1 (T.R (T.Cons fh ft) _) p =
                        T.uap1 T.mkNoSrcPos p
                          (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons ft) f_y
                      v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in
                      (v0v0v0v0v1)) f_x)) fxss)
            (T.fromExpList T.mkNoSrcPos p []))) p))
htranspose _ p = T.fatal p

gpartition ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a Bool)
          (T.Fun (T.List a) (T.Tuple2 (T.List a) (T.List a))))

hpartition ::
  (T.R (T.Fun a Bool)) ->
    (T.R (T.List a)) -> T.RefExp -> T.R (T.Tuple2 (T.List a) (T.List a))

gpartition ppartition p = T.ufun2 apartition ppartition p hpartition

hpartition fp fxs p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 (T.uwrapForward p (hfilter fp fxs p))
    (T.uwrapForward p
      (hfilter
        (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (gnot T.mkNoSrcPos p) fp) fxs
        p))

ggroup ::
  Eq a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.List (T.List a)))

sgroup :: Eq a => T.R (T.Fun (T.List a) (T.List (T.List a)))

ggroup pgroup p = T.uconstUse pgroup p sgroup

sgroup =
  T.uconstDef T.mkRoot agroup
    (\ p ->
      T.uap1 T.mkNoSrcPos p (ggroupBy T.mkNoSrcPos p) (T.mkNoSrcPos !== p))

ggroupBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Bool)) (T.Fun (T.List a) (T.List (T.List a))))

hgroupBy ::
  (T.R (T.Fun a (T.Fun a Bool))) ->
    (T.R (T.List a)) -> T.RefExp -> T.R (T.List (T.List a))

ggroupBy pgroupBy p = T.ufun2 agroupBy pgroupBy p hgroupBy

hgroupBy feq (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
hgroupBy feq (T.R (T.Cons fx fxs) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fx (gys T.mkNoSrcPos p))
    (T.uwrapForward p (hgroupBy feq (gzs T.mkNoSrcPos p) p))
  where
  
  gys pys p = T.uconstUse pys p sys
  
  gzs pys p = T.uconstUse pys p szs
  
  j108v34v108v40ys =
    case T.uwrapForward p (hspan (T.uap1 T.mkNoSrcPos p feq fx) fxs p) of
      T.R (T.Tuple2 fys fzs) kys -> (kys,fys,fzs)
      _ -> T.fatal p
  
  sys =
    T.uconstDef p a108v35v108v36ys
      (\ _ -> case j108v34v108v40ys of (kys,fys,fzs) -> fys)
  
  szs =
    T.uconstDef p a108v38v108v39zs
      (\ _ -> case j108v34v108v40ys of (kys,fys,fzs) -> fzs)
  
hgroupBy _ _ p = T.fatal p

ginits :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.List (T.List a)))

hinits :: (T.R (T.List a)) -> T.RefExp -> T.R (T.List (T.List a))

ginits pinits p = T.ufun1 ainits pinits p hinits

hinits (T.R T.List _) p =
  T.fromExpList T.mkNoSrcPos p [T.con0 T.mkNoSrcPos p T.List T.aList]
hinits (T.R (T.Cons fx fxs) _) p =
  T.uwrapForward p
    (((T.fromExpList T.mkNoSrcPos p [T.con0 T.mkNoSrcPos p T.List T.aList])
        *++
        (T.uwrapForward p
          (hmap (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fx)
            (T.uwrapForward p (hinits fxs p)) p))) p)
hinits _ p = T.fatal p

gtails :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.List (T.List a)))

htails :: (T.R (T.List a)) -> T.RefExp -> T.R (T.List (T.List a))

gtails ptails p = T.ufun1 atails ptails p htails

htails (T.R T.List _) p =
  T.fromExpList T.mkNoSrcPos p [T.con0 T.mkNoSrcPos p T.List T.aList]
htails (fxxs@(T.R (T.Cons _ fxs) _)) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons fxxs (T.uwrapForward p (htails fxs p))
htails _ p = T.fatal p

gisPrefixOf ::
  Eq a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) Bool))

hisPrefixOf ::
  Eq a => (T.R (T.List a)) -> (T.R (T.List a)) -> T.RefExp -> T.R Bool

gisPrefixOf pisPrefixOf p = T.ufun2 aisPrefixOf pisPrefixOf p hisPrefixOf

hisPrefixOf (T.R T.List _) _ p = T.con0 T.mkNoSrcPos p True aTrue
hisPrefixOf _ (T.R T.List _) p = T.con0 T.mkNoSrcPos p False aFalse
hisPrefixOf (T.R (T.Cons fx fxs) _) (T.R (T.Cons fy fys) _) p =
  T.uwrapForward p
    (((T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p) fx fy)
        *&&
        (T.uwrapForward p (hisPrefixOf fxs fys p))) p)
hisPrefixOf _ _ p = T.fatal p

gisSuffixOf ::
  Eq a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.Fun (T.List a) Bool))

hisSuffixOf ::
  Eq a => (T.R (T.List a)) -> (T.R (T.List a)) -> T.RefExp -> T.R Bool

gisSuffixOf pisSuffixOf p = T.ufun2 aisSuffixOf pisSuffixOf p hisSuffixOf

hisSuffixOf fx fy p =
  T.uwrapForward p
    (hisPrefixOf (T.uap1 T.mkNoSrcPos p (greverse T.mkNoSrcPos p) fx)
      (T.uap1 T.mkNoSrcPos p (greverse T.mkNoSrcPos p) fy) p)

gmapAccumL ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun b (T.Tuple2 a c)))
          (T.Fun a (T.Fun (T.List b) (T.Tuple2 a (T.List c)))))

hmapAccumL ::
  (T.R (T.Fun a (T.Fun b (T.Tuple2 a c)))) ->
    (T.R a) -> (T.R (T.List b)) -> T.RefExp -> T.R (T.Tuple2 a (T.List c))

gmapAccumL pmapAccumL p = T.ufun3 amapAccumL pmapAccumL p hmapAccumL

hmapAccumL ff fs (T.R T.List _) p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fs
    (T.con0 T.mkNoSrcPos p T.List T.aList)
hmapAccumL ff fs (T.R (T.Cons fx fxs) _) p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 (gs'' T.mkNoSrcPos p)
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons (gy T.mkNoSrcPos p)
      (gys T.mkNoSrcPos p))
  where
  
  gs' ps' p = T.uconstUse ps' p ss'
  
  gy ps' p = T.uconstUse ps' p sy
  
  j133v34v133v41s' =
    case T.uap2 T.mkNoSrcPos p ff fs fx of
      T.R (T.Tuple2 fs' fy) ks' -> (ks',fs',fy)
      _ -> T.fatal p
  
  ss' =
    T.uconstDef p a133v35v133v36s'
      (\ _ -> case j133v34v133v41s' of (ks',fs',fy) -> fs')
  
  sy =
    T.uconstDef p a133v39v133v39y
      (\ _ -> case j133v34v133v41s' of (ks',fs',fy) -> fy)
  
  gs'' ps'' p = T.uconstUse ps'' p ss''
  
  gys ps'' p = T.uconstUse ps'' p sys
  
  j134v34v134v41s'' =
    case T.uwrapForward p (hmapAccumL ff (gs' T.mkNoSrcPos p) fxs p) of
      T.R (T.Tuple2 fs'' fys) ks'' -> (ks'',fs'',fys)
      _ -> T.fatal p
  
  ss'' =
    T.uconstDef p a134v35v134v37s''
      (\ _ -> case j134v34v134v41s'' of (ks'',fs'',fys) -> fs'')
  
  sys =
    T.uconstDef p a134v39v134v40ys
      (\ _ -> case j134v34v134v41s'' of (ks'',fs'',fys) -> fys)
  
hmapAccumL _ _ _ p = T.fatal p

gmapAccumR ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun b (T.Tuple2 a c)))
          (T.Fun a (T.Fun (T.List b) (T.Tuple2 a (T.List c)))))

hmapAccumR ::
  (T.R (T.Fun a (T.Fun b (T.Tuple2 a c)))) ->
    (T.R a) -> (T.R (T.List b)) -> T.RefExp -> T.R (T.Tuple2 a (T.List c))

gmapAccumR pmapAccumR p = T.ufun3 amapAccumR pmapAccumR p hmapAccumR

hmapAccumR ff fs (T.R T.List _) p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fs
    (T.con0 T.mkNoSrcPos p T.List T.aList)
hmapAccumR ff fs (T.R (T.Cons fx fxs) _) p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 (gs'' T.mkNoSrcPos p)
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons (gy T.mkNoSrcPos p)
      (gys T.mkNoSrcPos p))
  where
  
  gs'' ps'' p = T.uconstUse ps'' p ss''
  
  gy ps'' p = T.uconstUse ps'' p sy
  
  j139v34v139v41s'' =
    case T.uap2 T.mkNoSrcPos p ff (gs' T.mkNoSrcPos p) fx of
      T.R (T.Tuple2 fs'' fy) ks'' -> (ks'',fs'',fy)
      _ -> T.fatal p
  
  ss'' =
    T.uconstDef p a139v35v139v37s''
      (\ _ -> case j139v34v139v41s'' of (ks'',fs'',fy) -> fs'')
  
  sy =
    T.uconstDef p a139v39v139v39y
      (\ _ -> case j139v34v139v41s'' of (ks'',fs'',fy) -> fy)
  
  gs' ps' p = T.uconstUse ps' p ss'
  
  gys ps' p = T.uconstUse ps' p sys
  
  j140v34v140v41s' =
    case T.uwrapForward p (hmapAccumR ff fs fxs p) of
      T.R (T.Tuple2 fs' fys) ks' -> (ks',fs',fys)
      _ -> T.fatal p
  
  ss' =
    T.uconstDef p a140v35v140v36s'
      (\ _ -> case j140v34v140v41s' of (ks',fs',fys) -> fs')
  
  sys =
    T.uconstDef p a140v39v140v40ys
      (\ _ -> case j140v34v140v41s' of (ks',fs',fys) -> fys)
  
hmapAccumR _ _ _ p = T.fatal p

gunfoldr ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R (T.Fun (T.Fun b (Maybe (T.Tuple2 a b))) (T.Fun b (T.List a)))

hunfoldr ::
  (T.R (T.Fun b (Maybe (T.Tuple2 a b)))) ->
    (T.R b) -> T.RefExp -> T.R (T.List a)

gunfoldr punfoldr p = T.ufun2 aunfoldr punfoldr p hunfoldr

hunfoldr ff fb p =
  T.uccase T.mkNoSrcPos p
    (let
      v143v27v145v61v1 (T.R Nothing _) p = T.con0 T.mkNoSrcPos p T.List T.aList
      v143v27v145v61v1 (T.R (Just (T.R (T.Tuple2 fa fb) _)) _) p =
        T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
          (T.uwrapForward p (hunfoldr ff fb p))
      v143v27v145v61v1 _ p = T.fatal p in (v143v27v145v61v1))
    (T.uap1 T.mkNoSrcPos p ff fb)

gsort :: Ord a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List a) (T.List a))

ssort :: Ord a => T.R (T.Fun (T.List a) (T.List a))

gsort psort p = T.uconstUse psort p ssort

ssort =
  T.uconstDef T.mkRoot asort
    (\ p -> T.uwrapForward p (hsortBy (gcompare T.mkNoSrcPos p) p))

gsortBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R (T.Fun (T.Fun a (T.Fun a Ordering)) (T.Fun (T.List a) (T.List a)))

hsortBy ::
  (T.R (T.Fun a (T.Fun a Ordering))) ->
    T.RefExp -> T.R (T.Fun (T.List a) (T.List a))

gsortBy psortBy p = T.ufun1 asortBy psortBy p hsortBy

hsortBy fcmp p =
  T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (gmergeAll T.mkNoSrcPos p)
    (gsequences T.mkNoSrcPos p)
  where
  
  gsequences psequences p =
    T.ufun1 a153v5v156v23sequences psequences p hsequences
  
  asequences = a153v5v156v23sequences
  
  hsequences (T.R (T.Cons fa (T.R (T.Cons fb fxs) _)) _) p =
    T.ucguard
      (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p)
        (T.uap2 T.mkNoSrcPos p fcmp fa fb) (T.con0 T.mkNoSrcPos p GT aGT))
      (T.uwrapForward p
        (hdescending fb (T.fromExpList T.mkNoSrcPos p [fa]) fxs p))
      (T.ucguard (gotherwise T.mkNoSrcPos p)
        (T.uwrapForward p
          (hascending fb (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fa) fxs p))
        (T.fatal p))
  hsequences fxs p = T.fromExpList T.mkNoSrcPos p [fxs]
  
  gdescending pdescending p =
    T.ufun3 a158v5v160v46descending pdescending p hdescending
  
  adescending = a158v5v160v46descending
  
  hdescending fa fas (z3descending@(T.R (T.Cons fb fbs) _)) p =
    T.ucguard
      (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p)
        (T.uap2 T.mkNoSrcPos p fcmp fa fb) (T.con0 T.mkNoSrcPos p GT aGT))
      (T.uwrapForward p
        (hdescending fb (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa fas) fbs p))
      (y1descending fa fas z3descending p)
  hdescending fa fas z3descending p = y1descending fa fas z3descending p
  
  y1descending fa fas fbs p =
    T.con2 T.mkNoSrcPos p T.Cons T.aCons
      (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa fas)
      (T.uwrapForward p (hsequences fbs p))
  
  gascending pascending p =
    T.ufun3 a162v5v164v46ascending pascending p hascending
  
  aascending = a162v5v164v46ascending
  
  hascending fa fas (z3ascending@(T.R (T.Cons fb fbs) _)) p =
    T.ucguard
      (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !/= p)
        (T.uap2 T.mkNoSrcPos p fcmp fa fb) (T.con0 T.mkNoSrcPos p GT aGT))
      (T.uwrapForward p
        (hascending fb
          (T.ufun1 T.mkLambda T.mkNoSrcPos p
            (\ fys p ->
              T.uap1 T.mkNoSrcPos p fas
                (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa fys))) fbs p))
      (y1ascending fa fas z3ascending p)
  hascending fa fas z3ascending p = y1ascending fa fas z3ascending p
  
  y1ascending fa fas fbs p =
    T.con2 T.mkNoSrcPos p T.Cons T.aCons
      (T.uap1 T.mkNoSrcPos p fas (T.fromExpList T.mkNoSrcPos p [fa]))
      (T.uwrapForward p (hsequences fbs p))
  
  gmergeAll pmergeAll p = T.ufun1 a166v5v167v42mergeAll pmergeAll p hmergeAll
  
  amergeAll = a166v5v167v42mergeAll
  
  hmergeAll (T.R (T.Cons fx (T.R T.List _)) _) p =
    T.projection T.mkNoSrcPos p fx
  hmergeAll fxs p =
    T.uwrapForward p (hmergeAll (T.uwrapForward p (hmergePairs fxs p)) p)
  
  gmergePairs pmergePairs p =
    T.ufun1 a169v5v170v28mergePairs pmergePairs p hmergePairs
  
  amergePairs = a169v5v170v28mergePairs
  
  hmergePairs (T.R (T.Cons fa (T.R (T.Cons fb fxs) _)) _) p =
    T.con2 T.mkNoSrcPos p T.Cons T.aCons (T.uwrapForward p (hmerge fa fb p))
      (T.uwrapForward p (hmergePairs fxs p))
  hmergePairs fxs p = T.projection T.mkNoSrcPos p fxs
  
  gmerge pmerge p = T.ufun2 a172v5v176v28merge pmerge p hmerge
  
  amerge = a172v5v176v28merge
  
  hmerge (fas@(T.R (T.Cons fa fas') _)) (fbs@(T.R (T.Cons fb fbs') _)) p =
    T.ucguard
      (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p)
        (T.uap2 T.mkNoSrcPos p fcmp fa fb) (T.con0 T.mkNoSrcPos p GT aGT))
      (T.con2 T.mkNoSrcPos p T.Cons T.aCons fb
        (T.uwrapForward p (hmerge fas fbs' p)))
      (T.ucguard (gotherwise T.mkNoSrcPos p)
        (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
          (T.uwrapForward p (hmerge fas' fbs p))) (T.fatal p))
  hmerge (T.R T.List _) fbs p = T.projection T.mkNoSrcPos p fbs
  hmerge fas (T.R T.List _) p = T.projection T.mkNoSrcPos p fas
  hmerge _ _ p = T.fatal p
  

ginsert ::
  Ord a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List a) (T.List a)))

sinsert :: Ord a => T.R (T.Fun a (T.Fun (T.List a) (T.List a)))

ginsert pinsert p = T.uconstUse pinsert p sinsert

sinsert =
  T.uconstDef T.mkRoot ainsert
    (\ p ->
      T.uap1 T.mkNoSrcPos p (ginsertBy T.mkNoSrcPos p)
        (gcompare T.mkNoSrcPos p))

ginsertBy ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun a Ordering))
          (T.Fun a (T.Fun (T.List a) (T.List a))))

hinsertBy ::
  (T.R (T.Fun a (T.Fun a Ordering))) ->
    (T.R a) -> (T.R (T.List a)) -> T.RefExp -> T.R (T.List a)

ginsertBy pinsertBy p = T.ufun3 ainsertBy pinsertBy p hinsertBy

hinsertBy fcmp fx (T.R T.List _) p = T.fromExpList T.mkNoSrcPos p [fx]
hinsertBy fcmp fx (fys@(T.R (T.Cons fy fys') _)) p =
  T.uccase T.mkNoSrcPos p
    (let
      v184v28v186v44v1 (T.R GT _) p =
        T.con2 T.mkNoSrcPos p T.Cons T.aCons fy
          (T.uwrapForward p (hinsertBy fcmp fx fys' p))
      v184v28v186v44v1 _ p = T.con2 T.mkNoSrcPos p T.Cons T.aCons fx fys in
      (v184v28v186v44v1)) (T.uap2 T.mkNoSrcPos p fcmp fx fy)
hinsertBy _ _ _ p = T.fatal p

gmaximumBy ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun a Ordering)) (T.Fun (T.List a) a))

hmaximumBy ::
  (T.R (T.Fun a (T.Fun a Ordering))) -> (T.R (T.List a)) -> T.RefExp -> T.R a

gmaximumBy pmaximumBy p = T.ufun2 amaximumBy pmaximumBy p hmaximumBy

hmaximumBy fcmp (T.R T.List _) p =
  T.uwrapForward p
    (herror (T.fromLitString T.mkNoSrcPos p "List.maximumBy: empty list") p)
hmaximumBy fcmp fxs p =
  T.uwrapForward p (hfoldl1 (gmax T.mkNoSrcPos p) fxs p)
  where
  
  gmax pmax p = T.ufun2 a192v28v194v47max pmax p hmax
  
  amax = a192v28v194v47max
  
  hmax fx fy p =
    T.uccase T.mkNoSrcPos p
      (let
        v192v38v194v47v1 (T.R GT _) p = T.projection T.mkNoSrcPos p fx
        v192v38v194v47v1 _ p = T.projection T.mkNoSrcPos p fy in
        (v192v38v194v47v1)) (T.uap2 T.mkNoSrcPos p fcmp fx fy)
  

gminimumBy ::
  T.RefSrcPos ->
    T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun a Ordering)) (T.Fun (T.List a) a))

hminimumBy ::
  (T.R (T.Fun a (T.Fun a Ordering))) -> (T.R (T.List a)) -> T.RefExp -> T.R a

gminimumBy pminimumBy p = T.ufun2 aminimumBy pminimumBy p hminimumBy

hminimumBy fcmp (T.R T.List _) p =
  T.uwrapForward p
    (herror (T.fromLitString T.mkNoSrcPos p "List.minimumBy: empty list") p)
hminimumBy fcmp fxs p =
  T.uwrapForward p (hfoldl1 (gmin T.mkNoSrcPos p) fxs p)
  where
  
  gmin pmin p = T.ufun2 a200v28v202v47min pmin p hmin
  
  amin = a200v28v202v47min
  
  hmin fx fy p =
    T.uccase T.mkNoSrcPos p
      (let
        v200v38v202v47v1 (T.R GT _) p = T.projection T.mkNoSrcPos p fy
        v200v38v202v47v1 _ p = T.projection T.mkNoSrcPos p fx in
        (v200v38v202v47v1)) (T.uap2 T.mkNoSrcPos p fcmp fx fy)
  

ggenericLength ::
  Integral a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List b) a)

hgenericLength :: Integral a => (T.R (T.List b)) -> T.RefExp -> T.R a

ggenericLength pgenericLength p =
  T.ufun1 agenericLength pgenericLength p hgenericLength

hgenericLength (T.R T.List _) p =
  T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
    (T.conInteger T.mkNoSrcPos p 0)
hgenericLength (T.R (T.Cons fx fxs) _) p =
  T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !+ p)
    (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
      (T.conInteger T.mkNoSrcPos p 1)) (T.uwrapForward p (hgenericLength fxs p))
hgenericLength _ p = T.fatal p

ggenericTake ::
  Integral a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List b) (T.List b)))

hgenericTake ::
  Integral a => (T.R a) -> (T.R (T.List b)) -> T.RefExp -> T.R (T.List b)

ggenericTake pgenericTake p = T.ufun2 agenericTake pgenericTake p hgenericTake

hgenericTake _ (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
hgenericTake fv210v13v210v13n v210v15v210v15n p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!== p) fv210v13v210v13n
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0))) (h v210v15v210v15n p)
    (y1genericTake fv210v13v210v13n v210v15v210v15n p)
  where
  
  h _ p = T.con0 T.mkNoSrcPos p T.List T.aList
  h _ p = y1genericTake fv210v13v210v13n v210v15v210v15n p
  
hgenericTake fv210v13v210v13n v210v15v210v15n p =
  y1genericTake fv210v13v210v13n v210v15v210v15n p

y1genericTake fn (T.R (T.Cons fx fxs) _) p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fn
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0)))
    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fx
      (T.uwrapForward p
        (hgenericTake
          (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !- p) fn
            (T.uap1 T.mkNoSrcPos p
              (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
              (T.conInteger T.mkNoSrcPos p 1))) fxs p)))
    (T.ucguard (gotherwise T.mkNoSrcPos p)
      (T.uwrapForward p
        (herror
          (T.fromLitString T.mkNoSrcPos p "List.genericTake: negative argument")
          p)) (T.fatal p))
y1genericTake _ _ p = T.fatal p

ggenericDrop ::
  Integral a =>
  T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun (T.List b) (T.List b)))

hgenericDrop ::
  Integral a => (T.R a) -> (T.R (T.List b)) -> T.RefExp -> T.R (T.List b)

ggenericDrop pgenericDrop p = T.ufun2 agenericDrop pgenericDrop p hgenericDrop

hgenericDrop fv216v13v216v13n fxs p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!== p) fv216v13v216v13n
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0))) (h fxs p)
    (y1genericDrop fv216v13v216v13n fxs p)
  where
  
  h fxs p = T.projection T.mkNoSrcPos p fxs
  h _ p = y1genericDrop fv216v13v216v13n fxs p
  
hgenericDrop fv216v13v216v13n fxs p = y1genericDrop fv216v13v216v13n fxs p

y1genericDrop _ (T.R T.List _) p = T.con0 T.mkNoSrcPos p T.List T.aList
y1genericDrop fn (T.R (T.Cons _ fxs) _) p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fn
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0)))
    (T.uwrapForward p
      (hgenericDrop
        (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !- p) fn
          (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
            (T.conInteger T.mkNoSrcPos p 1))) fxs p))
    (T.ucguard (gotherwise T.mkNoSrcPos p)
      (T.uwrapForward p
        (herror
          (T.fromLitString T.mkNoSrcPos p "List.genericDrop: negative argument")
          p)) (T.fatal p))
y1genericDrop _ _ p = T.fatal p

ggenericSplitAt ::
  Integral a =>
  T.RefSrcPos ->
    T.RefExp ->
      T.R (T.Fun a (T.Fun (T.List b) (T.Tuple2 (T.List b) (T.List b))))

hgenericSplitAt ::
  Integral a =>
  (T.R a) ->
    (T.R (T.List b)) -> T.RefExp -> T.R (T.Tuple2 (T.List b) (T.List b))

ggenericSplitAt pgenericSplitAt p =
  T.ufun2 agenericSplitAt pgenericSplitAt p hgenericSplitAt

hgenericSplitAt fv223v16v223v16n fxs p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!== p) fv223v16v223v16n
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0))) (h fxs p)
    (y1genericSplitAt fv223v16v223v16n fxs p)
  where
  
  h fxs p =
    T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2
      (T.con0 T.mkNoSrcPos p T.List T.aList) fxs
  h _ p = y1genericSplitAt fv223v16v223v16n fxs p
  
hgenericSplitAt fv223v16v223v16n fxs p = y1genericSplitAt fv223v16v223v16n fxs p

y1genericSplitAt _ (T.R T.List _) p =
  T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2
    (T.con0 T.mkNoSrcPos p T.List T.aList)
    (T.con0 T.mkNoSrcPos p T.List T.aList)
y1genericSplitAt fn (T.R (T.Cons fx fxs) _) p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fn
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0)))
    (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2
      (T.con2 T.mkNoSrcPos p T.Cons T.aCons fx (gxs' T.mkNoSrcPos p))
      (gxs'' T.mkNoSrcPos p))
    (T.ucguard (gotherwise T.mkNoSrcPos p)
      (T.uwrapForward p
        (herror
          (T.fromLitString T.mkNoSrcPos p
            "List.genericSplitAt: negative argument") p)) (T.fatal p))
  where
  
  gxs' pxs' p = T.uconstUse pxs' p sxs'
  
  gxs'' pxs' p = T.uconstUse pxs' p sxs''
  
  j228v14v228v23xs' =
    case
      T.uwrapForward p
        (hgenericSplitAt
          (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !- p) fn
            (T.uap1 T.mkNoSrcPos p
              (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
              (T.conInteger T.mkNoSrcPos p 1))) fxs p) of
      T.R (T.Tuple2 fxs' fxs'') kxs' -> (kxs',fxs',fxs'')
      _ -> T.fatal p
  
  sxs' =
    T.uconstDef p a228v15v228v17xs'
      (\ _ -> case j228v14v228v23xs' of (kxs',fxs',fxs'') -> fxs')
  
  sxs'' =
    T.uconstDef p a228v19v228v22xs''
      (\ _ -> case j228v14v228v23xs' of (kxs',fxs',fxs'') -> fxs'')
  
y1genericSplitAt _ _ p = T.fatal p

ggenericIndex ::
  Integral a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List b) (T.Fun a b))

hgenericIndex :: Integral a => (T.R (T.List b)) -> (T.R a) -> T.RefExp -> T.R b

ggenericIndex pgenericIndex p =
  T.ufun2 agenericIndex pgenericIndex p hgenericIndex

hgenericIndex (z1genericIndex@(T.R (T.Cons fx _) _)) fv231v21v231v21n p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!== p) fv231v21v231v21n
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0))) (h p)
    (y1genericIndex z1genericIndex fv231v21v231v21n p)
  where
  
  h p = T.projection T.mkNoSrcPos p fx
  h p = y1genericIndex z1genericIndex fv231v21v231v21n p
  
hgenericIndex z1genericIndex fv231v21v231v21n p =
  y1genericIndex z1genericIndex fv231v21v231v21n p

y1genericIndex (T.R (T.Cons _ fxs) _) fn p =
  T.ucguard
    (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fn
      (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
        (T.conInteger T.mkNoSrcPos p 0)))
    (T.uwrapForward p
      (hgenericIndex fxs
        (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !- p) fn
          (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p)
            (T.conInteger T.mkNoSrcPos p 1))) p))
    (T.ucguard (gotherwise T.mkNoSrcPos p)
      (T.uwrapForward p
        (herror
          (T.fromLitString T.mkNoSrcPos p
            "List.genericIndex: negative argument") p)) (T.fatal p))
y1genericIndex _ _ p =
  T.uwrapForward p
    (herror
      (T.fromLitString T.mkNoSrcPos p "List.genericIndex: index too large") p)

ggenericReplicate ::
  Integral a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun a (T.Fun b (T.List b)))

hgenericReplicate ::
  Integral a => (T.R a) -> (T.R b) -> T.RefExp -> T.R (T.List b)

ggenericReplicate pgenericReplicate p =
  T.ufun2 agenericReplicate pgenericReplicate p hgenericReplicate

hgenericReplicate fn fx p =
  T.uwrapForward p (hgenericTake fn (T.uwrapForward p (hrepeat fx p)) p)

gzip4 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List a)
          (T.Fun (T.List b)
            (T.Fun (T.List c) (T.Fun (T.List d) (T.List (T.Tuple4 a b c d))))))

szip4 ::
  T.R
    (T.Fun (T.List a)
      (T.Fun (T.List b)
        (T.Fun (T.List c) (T.Fun (T.List d) (T.List (T.Tuple4 a b c d))))))

gzip4 pzip4 p = T.uconstUse pzip4 p szip4

szip4 =
  T.uconstDef T.mkRoot azip4
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gzipWith4 T.mkNoSrcPos p)
        (T.pa0 T.Tuple4 T.cn4 T.mkNoSrcPos p T.aTuple4))

gzip5 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List a)
          (T.Fun (T.List b)
            (T.Fun (T.List c)
              (T.Fun (T.List d)
                (T.Fun (T.List e) (T.List (T.Tuple5 a b c d e)))))))

szip5 ::
  T.R
    (T.Fun (T.List a)
      (T.Fun (T.List b)
        (T.Fun (T.List c)
          (T.Fun (T.List d) (T.Fun (T.List e) (T.List (T.Tuple5 a b c d e)))))))

gzip5 pzip5 p = T.uconstUse pzip5 p szip5

szip5 =
  T.uconstDef T.mkRoot azip5
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gzipWith5 T.mkNoSrcPos p)
        (T.pa0 T.Tuple5 T.cn5 T.mkNoSrcPos p T.aTuple5))

gzip6 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List a)
          (T.Fun (T.List b)
            (T.Fun (T.List c)
              (T.Fun (T.List d)
                (T.Fun (T.List e)
                  (T.Fun (T.List f) (T.List (T.Tuple6 a b c d e f))))))))

szip6 ::
  T.R
    (T.Fun (T.List a)
      (T.Fun (T.List b)
        (T.Fun (T.List c)
          (T.Fun (T.List d)
            (T.Fun (T.List e)
              (T.Fun (T.List f) (T.List (T.Tuple6 a b c d e f))))))))

gzip6 pzip6 p = T.uconstUse pzip6 p szip6

szip6 =
  T.uconstDef T.mkRoot azip6
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gzipWith6 T.mkNoSrcPos p)
        (T.pa0 T.Tuple6 T.cn6 T.mkNoSrcPos p T.aTuple6))

gzip7 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List a)
          (T.Fun (T.List b)
            (T.Fun (T.List c)
              (T.Fun (T.List d)
                (T.Fun (T.List e)
                  (T.Fun (T.List f)
                    (T.Fun (T.List g) (T.List (T.Tuple7 a b c d e f g)))))))))

szip7 ::
  T.R
    (T.Fun (T.List a)
      (T.Fun (T.List b)
        (T.Fun (T.List c)
          (T.Fun (T.List d)
            (T.Fun (T.List e)
              (T.Fun (T.List f)
                (T.Fun (T.List g) (T.List (T.Tuple7 a b c d e f g)))))))))

gzip7 pzip7 p = T.uconstUse pzip7 p szip7

szip7 =
  T.uconstDef T.mkRoot azip7
    (\ p ->
      T.uap1 T.mkNoSrcPos p (gzipWith7 T.mkNoSrcPos p)
        (T.pa0 T.Tuple7 T.cn7 T.mkNoSrcPos p T.aTuple7))

gzipWith4 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun b (T.Fun c (T.Fun d e))))
          (T.Fun (T.List a)
            (T.Fun (T.List b)
              (T.Fun (T.List c) (T.Fun (T.List d) (T.List e))))))

hzipWith4 ::
  (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d e))))) ->
    (T.R (T.List a)) ->
      (T.R (T.List b)) ->
        (T.R (T.List c)) -> (T.R (T.List d)) -> T.RefExp -> T.R (T.List e)

gzipWith4 pzipWith4 p = T.ufun5 azipWith4 pzipWith4 p hzipWith4

hzipWith4 fz (T.R (T.Cons fa fas) _) (T.R (T.Cons fb fbs) _)
  (T.R (T.Cons fc fcs) _) (T.R (T.Cons fd fds) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons (T.uap4 T.mkNoSrcPos p fz fa fb fc fd)
    (T.uwrapForward p (hzipWith4 fz fas fbs fcs fds p))
hzipWith4 _ _ _ _ _ p = T.con0 T.mkNoSrcPos p T.List T.aList

gzipWith5 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e f)))))
          (T.Fun (T.List a)
            (T.Fun (T.List b)
              (T.Fun (T.List c)
                (T.Fun (T.List d) (T.Fun (T.List e) (T.List f)))))))

hzipWith5 ::
  (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e f)))))) ->
    (T.R (T.List a)) ->
      (T.R (T.List b)) ->
        (T.R (T.List c)) ->
          (T.R (T.List d)) -> (T.R (T.List e)) -> T.RefExp -> T.R (T.List f)

gzipWith5 pzipWith5 p = T.ufun6 azipWith5 pzipWith5 p hzipWith5

hzipWith5 fz (T.R (T.Cons fa fas) _) (T.R (T.Cons fb fbs) _)
  (T.R (T.Cons fc fcs) _) (T.R (T.Cons fd fds) _) (T.R (T.Cons fe fes) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons (T.uap5 T.mkNoSrcPos p fz fa fb fc fd fe)
    (T.uap6 T.mkNoSrcPos p (gzipWith5 T.mkNoSrcPos p) fz fas fbs fcs fds fes)
hzipWith5 _ _ _ _ _ _ p = T.con0 T.mkNoSrcPos p T.List T.aList

gzipWith6 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e (T.Fun f g))))))
          (T.Fun (T.List a)
            (T.Fun (T.List b)
              (T.Fun (T.List c)
                (T.Fun (T.List d)
                  (T.Fun (T.List e) (T.Fun (T.List f) (T.List g))))))))

hzipWith6 ::
  (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e (T.Fun f g))))))) ->
    (T.R (T.List a)) ->
      (T.R (T.List b)) ->
        (T.R (T.List c)) ->
          (T.R (T.List d)) ->
            (T.R (T.List e)) -> (T.R (T.List f)) -> T.RefExp -> T.R (T.List g)

gzipWith6 pzipWith6 p = T.ufun7 azipWith6 pzipWith6 p hzipWith6

hzipWith6 fz (T.R (T.Cons fa fas) _) (T.R (T.Cons fb fbs) _)
  (T.R (T.Cons fc fcs) _) (T.R (T.Cons fd fds) _) (T.R (T.Cons fe fes) _)
  (T.R (T.Cons ff ffs) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons
    (T.uap6 T.mkNoSrcPos p fz fa fb fc fd fe ff)
    (T.uap7 T.mkNoSrcPos p (gzipWith6 T.mkNoSrcPos p) fz fas fbs fcs fds fes
      ffs)
hzipWith6 _ _ _ _ _ _ _ p = T.con0 T.mkNoSrcPos p T.List T.aList

gzipWith7 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun
          (T.Fun a
            (T.Fun b (T.Fun c (T.Fun d (T.Fun e (T.Fun f (T.Fun g h)))))))
          (T.Fun (T.List a)
            (T.Fun (T.List b)
              (T.Fun (T.List c)
                (T.Fun (T.List d)
                  (T.Fun (T.List e)
                    (T.Fun (T.List f) (T.Fun (T.List g) (T.List h)))))))))

hzipWith7 ::
  (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e (T.Fun f (T.Fun g h))))))))
    ->
    (T.R (T.List a)) ->
      (T.R (T.List b)) ->
        (T.R (T.List c)) ->
          (T.R (T.List d)) ->
            (T.R (T.List e)) ->
              (T.R (T.List f)) -> (T.R (T.List g)) -> T.RefExp -> T.R (T.List h)

gzipWith7 pzipWith7 p = T.ufun8 azipWith7 pzipWith7 p hzipWith7

hzipWith7 fz (T.R (T.Cons fa fas) _) (T.R (T.Cons fb fbs) _)
  (T.R (T.Cons fc fcs) _) (T.R (T.Cons fd fds) _) (T.R (T.Cons fe fes) _)
  (T.R (T.Cons ff ffs) _) (T.R (T.Cons fg fgs) _) p =
  T.con2 T.mkNoSrcPos p T.Cons T.aCons
    (T.uap7 T.mkNoSrcPos p fz fa fb fc fd fe ff fg)
    (T.uap8 T.mkNoSrcPos p (gzipWith7 T.mkNoSrcPos p) fz fas fbs fcs fds fes ffs
      fgs)
hzipWith7 _ _ _ _ _ _ _ _ p = T.con0 T.mkNoSrcPos p T.List T.aList

gunzip4 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List (T.Tuple4 a b c d))
          (T.Tuple4 (T.List a) (T.List b) (T.List c) (T.List d)))

sunzip4 ::
  T.R
    (T.Fun (T.List (T.Tuple4 a b c d))
      (T.Tuple4 (T.List a) (T.List b) (T.List c) (T.List d)))

gunzip4 punzip4 p = T.uconstUse punzip4 p sunzip4

sunzip4 =
  T.uconstDef T.mkRoot aunzip4
    (\ p ->
      T.uap2 T.mkNoSrcPos p (gfoldr T.mkNoSrcPos p)
        (T.ufun2 T.mkLambda T.mkNoSrcPos p
          (\ v278v35v279v61v1 v278v35v279v61v2 p ->
            case (v278v35v279v61v1,v278v35v279v61v2) of
              (T.R (T.Tuple4 fa fb fc fd) _
                  ,T.R ~(T.Tuple4 fas fbs fcs fds) _) ->
                let
                  gas pas p = T.uconstUse pas p sas
                  sas =
                    T.uconstDef p a0v0v0v0as
                      (\ p -> T.projection T.mkNoSrcPos p fas)
                  gbs pbs p = T.uconstUse pbs p sbs
                  sbs =
                    T.uconstDef p a0v0v0v0bs
                      (\ p -> T.projection T.mkNoSrcPos p fbs)
                  gcs pcs p = T.uconstUse pcs p scs
                  scs =
                    T.uconstDef p a0v0v0v0cs
                      (\ p -> T.projection T.mkNoSrcPos p fcs)
                  gds pds p = T.uconstUse pds p sds
                  sds =
                    T.uconstDef p a0v0v0v0ds
                      (\ p -> T.projection T.mkNoSrcPos p fds) in
                  (T.con4 T.mkNoSrcPos p T.Tuple4 T.aTuple4
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
                      (gas T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fb
                      (gbs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fc
                      (gcs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fd
                      (gds T.mkNoSrcPos p)))
              _ -> T.fatal p))
        (T.con4 T.mkNoSrcPos p T.Tuple4 T.aTuple4
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)))

gunzip5 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List (T.Tuple5 a b c d e))
          (T.Tuple5 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)))

sunzip5 ::
  T.R
    (T.Fun (T.List (T.Tuple5 a b c d e))
      (T.Tuple5 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)))

gunzip5 punzip5 p = T.uconstUse punzip5 p sunzip5

sunzip5 =
  T.uconstDef T.mkRoot aunzip5
    (\ p ->
      T.uap2 T.mkNoSrcPos p (gfoldr T.mkNoSrcPos p)
        (T.ufun2 T.mkLambda T.mkNoSrcPos p
          (\ v283v35v284v66v1 v283v35v284v66v2 p ->
            case (v283v35v284v66v1,v283v35v284v66v2) of
              (T.R (T.Tuple5 fa fb fc fd fe) _
                  ,T.R ~(T.Tuple5 fas fbs fcs fds fes) _) ->
                let
                  gas pas p = T.uconstUse pas p sas
                  sas =
                    T.uconstDef p a0v0v0v0as
                      (\ p -> T.projection T.mkNoSrcPos p fas)
                  gbs pbs p = T.uconstUse pbs p sbs
                  sbs =
                    T.uconstDef p a0v0v0v0bs
                      (\ p -> T.projection T.mkNoSrcPos p fbs)
                  gcs pcs p = T.uconstUse pcs p scs
                  scs =
                    T.uconstDef p a0v0v0v0cs
                      (\ p -> T.projection T.mkNoSrcPos p fcs)
                  gds pds p = T.uconstUse pds p sds
                  sds =
                    T.uconstDef p a0v0v0v0ds
                      (\ p -> T.projection T.mkNoSrcPos p fds)
                  ges pes p = T.uconstUse pes p ses
                  ses =
                    T.uconstDef p a0v0v0v0es
                      (\ p -> T.projection T.mkNoSrcPos p fes) in
                  (T.con5 T.mkNoSrcPos p T.Tuple5 T.aTuple5
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
                      (gas T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fb
                      (gbs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fc
                      (gcs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fd
                      (gds T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fe
                      (ges T.mkNoSrcPos p)))
              _ -> T.fatal p))
        (T.con5 T.mkNoSrcPos p T.Tuple5 T.aTuple5
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)))

gunzip6 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List (T.Tuple6 a b c d e f))
          (T.Tuple6 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)
            (T.List f)))

sunzip6 ::
  T.R
    (T.Fun (T.List (T.Tuple6 a b c d e f))
      (T.Tuple6 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)
        (T.List f)))

gunzip6 punzip6 p = T.uconstUse punzip6 p sunzip6

sunzip6 =
  T.uconstDef T.mkRoot aunzip6
    (\ p ->
      T.uap2 T.mkNoSrcPos p (gfoldr T.mkNoSrcPos p)
        (T.ufun2 T.mkLambda T.mkNoSrcPos p
          (\ v288v35v289v71v1 v288v35v289v71v2 p ->
            case (v288v35v289v71v1,v288v35v289v71v2) of
              (T.R (T.Tuple6 fa fb fc fd fe ff) _
                  ,T.R ~(T.Tuple6 fas fbs fcs fds fes ffs) _) ->
                let
                  gas pas p = T.uconstUse pas p sas
                  sas =
                    T.uconstDef p a0v0v0v0as
                      (\ p -> T.projection T.mkNoSrcPos p fas)
                  gbs pbs p = T.uconstUse pbs p sbs
                  sbs =
                    T.uconstDef p a0v0v0v0bs
                      (\ p -> T.projection T.mkNoSrcPos p fbs)
                  gcs pcs p = T.uconstUse pcs p scs
                  scs =
                    T.uconstDef p a0v0v0v0cs
                      (\ p -> T.projection T.mkNoSrcPos p fcs)
                  gds pds p = T.uconstUse pds p sds
                  sds =
                    T.uconstDef p a0v0v0v0ds
                      (\ p -> T.projection T.mkNoSrcPos p fds)
                  ges pes p = T.uconstUse pes p ses
                  ses =
                    T.uconstDef p a0v0v0v0es
                      (\ p -> T.projection T.mkNoSrcPos p fes)
                  gfs pfs p = T.uconstUse pfs p sfs
                  sfs =
                    T.uconstDef p a0v0v0v0fs
                      (\ p -> T.projection T.mkNoSrcPos p ffs) in
                  (T.con6 T.mkNoSrcPos p T.Tuple6 T.aTuple6
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
                      (gas T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fb
                      (gbs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fc
                      (gcs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fd
                      (gds T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fe
                      (ges T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons ff
                      (gfs T.mkNoSrcPos p)))
              _ -> T.fatal p))
        (T.con6 T.mkNoSrcPos p T.Tuple6 T.aTuple6
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)))

gunzip7 ::
  T.RefSrcPos ->
    T.RefExp ->
      T.R
        (T.Fun (T.List (T.Tuple7 a b c d e f g))
          (T.Tuple7 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)
            (T.List f) (T.List g)))

sunzip7 ::
  T.R
    (T.Fun (T.List (T.Tuple7 a b c d e f g))
      (T.Tuple7 (T.List a) (T.List b) (T.List c) (T.List d) (T.List e)
        (T.List f) (T.List g)))

gunzip7 punzip7 p = T.uconstUse punzip7 p sunzip7

sunzip7 =
  T.uconstDef T.mkRoot aunzip7
    (\ p ->
      T.uap2 T.mkNoSrcPos p (gfoldr T.mkNoSrcPos p)
        (T.ufun2 T.mkLambda T.mkNoSrcPos p
          (\ v293v27v294v68v1 v293v27v294v68v2 p ->
            case (v293v27v294v68v1,v293v27v294v68v2) of
              (T.R (T.Tuple7 fa fb fc fd fe ff fg) _
                  ,T.R ~(T.Tuple7 fas fbs fcs fds fes ffs fgs) _) ->
                let
                  gas pas p = T.uconstUse pas p sas
                  sas =
                    T.uconstDef p a0v0v0v0as
                      (\ p -> T.projection T.mkNoSrcPos p fas)
                  gbs pbs p = T.uconstUse pbs p sbs
                  sbs =
                    T.uconstDef p a0v0v0v0bs
                      (\ p -> T.projection T.mkNoSrcPos p fbs)
                  gcs pcs p = T.uconstUse pcs p scs
                  scs =
                    T.uconstDef p a0v0v0v0cs
                      (\ p -> T.projection T.mkNoSrcPos p fcs)
                  gds pds p = T.uconstUse pds p sds
                  sds =
                    T.uconstDef p a0v0v0v0ds
                      (\ p -> T.projection T.mkNoSrcPos p fds)
                  ges pes p = T.uconstUse pes p ses
                  ses =
                    T.uconstDef p a0v0v0v0es
                      (\ p -> T.projection T.mkNoSrcPos p fes)
                  gfs pfs p = T.uconstUse pfs p sfs
                  sfs =
                    T.uconstDef p a0v0v0v0fs
                      (\ p -> T.projection T.mkNoSrcPos p ffs)
                  ggs pgs p = T.uconstUse pgs p sgs
                  sgs =
                    T.uconstDef p a0v0v0v0gs
                      (\ p -> T.projection T.mkNoSrcPos p fgs) in
                  (T.con7 T.mkNoSrcPos p T.Tuple7 T.aTuple7
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fa
                      (gas T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fb
                      (gbs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fc
                      (gcs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fd
                      (gds T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fe
                      (ges T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons ff
                      (gfs T.mkNoSrcPos p))
                    (T.con2 T.mkNoSrcPos p T.Cons T.aCons fg
                      (ggs T.mkNoSrcPos p)))
              _ -> T.fatal p))
        (T.con7 T.mkNoSrcPos p T.Tuple7 T.aTuple7
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)
          (T.con0 T.mkNoSrcPos p T.List T.aList)))

tList = T.mkModule "List" "List.hs" Prelude.False

aelemIndex = T.mkVariable tList 340001 340042 3 1 "elemIndex" Prelude.False

aelemIndices = T.mkVariable tList 370001 370044 3 1 "elemIndices" Prelude.False

afind = T.mkVariable tList 400001 400049 3 1 "find" Prelude.False

afindIndex = T.mkVariable tList 430001 430054 3 1 "findIndex" Prelude.False

afindIndices = T.mkVariable tList 460001 460011 3 2 "findIndices" Prelude.False

anub = T.mkVariable tList 490001 490036 3 0 "nub" Prelude.False

anubBy = T.mkVariable tList 520001 530071 3 2 "nubBy" Prelude.False

adelete = T.mkVariable tList 560001 560039 3 0 "delete" Prelude.False

adeleteBy = T.mkVariable tList 590001 600071 3 3 "deleteBy" Prelude.False

(+\\) = T.mkVariable tList 630002 630045 20 0 "\\\\" Prelude.False

adeleteFirstsBy =
  T.mkVariable tList 660001 660051 3 1 "deleteFirstsBy" Prelude.False

aunion = T.mkVariable tList 690001 690038 3 0 "union" Prelude.False

aunionBy = T.mkVariable tList 720001 720067 3 3 "unionBy" Prelude.False

aintersect = T.mkVariable tList 750001 750042 3 0 "intersect" Prelude.False

aintersectBy = T.mkVariable tList 780001 780011 3 3 "intersectBy" Prelude.False

aintersperse = T.mkVariable tList 810001 830055 3 2 "intersperse" Prelude.False

atranspose = T.mkVariable tList 910001 940040 3 1 "transpose" Prelude.False

apartition = T.mkVariable tList 970001 970061 3 2 "partition" Prelude.False

agroup = T.mkVariable tList 1030001 1030038 3 0 "group" Prelude.False

agroupBy = T.mkVariable tList 1060001 1080057 3 2 "groupBy" Prelude.False

ainits = T.mkVariable tList 1130001 1140053 3 1 "inits" Prelude.False

atails = T.mkVariable tList 1190001 1200041 3 1 "tails" Prelude.False

aisPrefixOf = T.mkVariable tList 1230001 1250054 3 2 "isPrefixOf" Prelude.False

aisSuffixOf = T.mkVariable tList 1280001 1280059 3 2 "isSuffixOf" Prelude.False

amapAccumL = T.mkVariable tList 1310001 1340061 3 3 "mapAccumL" Prelude.False

amapAccumR = T.mkVariable tList 1370001 1400060 3 3 "mapAccumR" Prelude.False

aunfoldr = T.mkVariable tList 1430001 1450061 3 2 "unfoldr" Prelude.False

asort = T.mkVariable tList 1480001 1480041 3 0 "sort" Prelude.False

asortBy = T.mkVariable tList 1510001 1760028 3 1 "sortBy" Prelude.False

ainsert = T.mkVariable tList 1790001 1790042 3 0 "insert" Prelude.False

ainsertBy = T.mkVariable tList 1820001 1860044 3 3 "insertBy" Prelude.False

amaximumBy = T.mkVariable tList 1890001 1940047 3 2 "maximumBy" Prelude.False

aminimumBy = T.mkVariable tList 1970001 2020047 3 2 "minimumBy" Prelude.False

agenericLength =
  T.mkVariable tList 2050001 2060047 3 1 "genericLength" Prelude.False

agenericTake =
  T.mkVariable tList 2090001 2130070 3 2 "genericTake" Prelude.False

agenericDrop =
  T.mkVariable tList 2160001 2200070 3 2 "genericDrop" Prelude.False

agenericSplitAt =
  T.mkVariable tList 2230001 2280050 3 2 "genericSplitAt" Prelude.False

agenericIndex =
  T.mkVariable tList 2310001 2350069 3 2 "genericIndex" Prelude.False

agenericReplicate =
  T.mkVariable tList 2380001 2380050 3 2 "genericReplicate" Prelude.False

azip4 = T.mkVariable tList 2410001 2410041 3 0 "zip4" Prelude.False

azip5 = T.mkVariable tList 2440001 2440042 3 0 "zip5" Prelude.False

azip6 = T.mkVariable tList 2480001 2480043 3 0 "zip6" Prelude.False

azip7 = T.mkVariable tList 2520001 2520044 3 0 "zip7" Prelude.False

azipWith4 = T.mkVariable tList 2550001 2570029 3 5 "zipWith4" Prelude.False

azipWith5 = T.mkVariable tList 2610001 2630029 3 6 "zipWith5" Prelude.False

azipWith6 = T.mkVariable tList 2670001 2690029 3 7 "zipWith6" Prelude.False

azipWith7 = T.mkVariable tList 2730001 2750029 3 8 "zipWith7" Prelude.False

aunzip4 = T.mkVariable tList 2780001 2800046 3 0 "unzip4" Prelude.False

aunzip5 = T.mkVariable tList 2830001 2850049 3 0 "unzip5" Prelude.False

aunzip6 = T.mkVariable tList 2880001 2900052 3 0 "unzip6" Prelude.False

aunzip7 = T.mkVariable tList 2930001 2950047 3 0 "unzip7" Prelude.False

a108v35v108v36ys = T.mkVariable tList 1080035 1080036 3 0 "ys" Prelude.True

a108v38v108v39zs = T.mkVariable tList 1080038 1080039 3 0 "zs" Prelude.True

a133v35v133v36s' = T.mkVariable tList 1330035 1330036 3 0 "s'" Prelude.True

a133v39v133v39y = T.mkVariable tList 1330039 1330039 3 0 "y" Prelude.True

a134v35v134v37s'' = T.mkVariable tList 1340035 1340037 3 0 "s''" Prelude.True

a134v39v134v40ys = T.mkVariable tList 1340039 1340040 3 0 "ys" Prelude.True

a139v35v139v37s'' = T.mkVariable tList 1390035 1390037 3 0 "s''" Prelude.True

a139v39v139v39y = T.mkVariable tList 1390039 1390039 3 0 "y" Prelude.True

a140v35v140v36s' = T.mkVariable tList 1400035 1400036 3 0 "s'" Prelude.True

a140v39v140v40ys = T.mkVariable tList 1400039 1400040 3 0 "ys" Prelude.True

a153v5v156v23sequences =
  T.mkVariable tList 1530005 1560023 3 1 "sequences" Prelude.True

a158v5v160v46descending =
  T.mkVariable tList 1580005 1600046 3 3 "descending" Prelude.True

a162v5v164v46ascending =
  T.mkVariable tList 1620005 1640046 3 3 "ascending" Prelude.True

a166v5v167v42mergeAll =
  T.mkVariable tList 1660005 1670042 3 1 "mergeAll" Prelude.True

a169v5v170v28mergePairs =
  T.mkVariable tList 1690005 1700028 3 1 "mergePairs" Prelude.True

a172v5v176v28merge = T.mkVariable tList 1720005 1760028 3 2 "merge" Prelude.True

a192v28v194v47max = T.mkVariable tList 1920028 1940047 3 2 "max" Prelude.True

a200v28v202v47min = T.mkVariable tList 2000028 2020047 3 2 "min" Prelude.True

a228v15v228v17xs' = T.mkVariable tList 2280015 2280017 3 0 "xs'" Prelude.True

a228v19v228v22xs'' = T.mkVariable tList 2280019 2280022 3 0 "xs''" Prelude.True

a0v0v0v0as = T.mkVariable tList 0 0 3 0 "as" Prelude.True

a0v0v0v0bs = T.mkVariable tList 0 0 3 0 "bs" Prelude.True

a0v0v0v0cs = T.mkVariable tList 0 0 3 0 "cs" Prelude.True

a0v0v0v0ds = T.mkVariable tList 0 0 3 0 "ds" Prelude.True

a0v0v0v0es = T.mkVariable tList 0 0 3 0 "es" Prelude.True

a0v0v0v0fs = T.mkVariable tList 0 0 3 0 "fs" Prelude.True

a0v0v0v0gs = T.mkVariable tList 0 0 3 0 "gs" Prelude.True