27 lines
682 B
Agda
27 lines
682 B
Agda
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
|
||
MkBind : FC -> String -> Icit -> Quant -> Tm -> Binder
|
||
|
||
-- I don't have a show for terms without a name list
|
||
|
||
instance Show Binder where
|
||
show (MkBind _ 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 (MkBind fc nm icit quant t :: ts) u
|
||
go ts tm = (tm, reverse ts)
|