open import 1Lab.Univalence.SIP
open import 1Lab.Reflection
open import 1Lab.Type.Sigma
open import 1Lab.Univalence
open import 1Lab.Equiv
open import 1Lab.Path
open import 1Lab.Type

open import Data.List.Base

module 1Lab.Univalence.SIP.Auto where

makeAutoStr-term : Nat  Term  TC 
makeAutoStr-term zero t = typeError (strErr "autoDesc ran out of fuel"  [])
makeAutoStr-term (suc n) t =
  tryPoint
    <|> tryBin (quote _s→_)
    <|> tryBin (quote _s×_)
    <|> useConst
  where
    tryPoint = do
      unify t (con (quote s∙) [])

    tryBin : Name  TC 
    tryBin namen = do
      h1  new-meta unknown
      h2  new-meta unknown
      tt  unify (con namen (h1 v∷ h2 v∷ [])) t
      tt  makeAutoStr-term n h1
      makeAutoStr-term n h2

    useConst = do
      unify t (con (quote s-const) (unknown v∷ []))

macro
  auto-str-term : Term  TC 
  auto-str-term = makeAutoStr-term 100