module Lib.Util import Lib.Types funArgs : Tm -> (Tm × List Tm) funArgs tm = go tm Nil where go : Tm -> List Tm -> (Tm × List Tm) go (App _ t u) args = go t (u :: args) go t args = (t, args) data Binder : U where MkBinder : FC -> String -> Icit -> Quant -> Tm -> Binder -- I don't have a show for terms without a name list instance Show Binder where show (MkBinder _ nm icit quant t) = "(\{show quant}\{nm} \{show icit} : ... :: Nil)" splitTele : Tm -> (Tm × List Binder) splitTele = go Nil where go : List Binder -> Tm -> (Tm × List Binder) go ts (Pi fc nm icit quant t u) = go (MkBinder fc nm icit quant t :: ts) u go ts tm = (tm, reverse ts)