0 | module Idris.Syntax.Views
3 | import Idris.Syntax.Builtin
9 | = Explicit FC (PTerm' nm)
10 | | Auto FC (PTerm' nm)
11 | | Named FC Name (PTerm' nm)
14 | unArg : Arg' nm -> PTerm' nm
15 | unArg (Explicit _ t) = t
16 | unArg (Auto _ t) = t
17 | unArg (Named _ _ t) = t
20 | getFnArgs : (Name -> nm) -> PTerm' nm -> (PTerm' nm, List (Arg' nm))
21 | getFnArgs embed fts = go fts [] where
23 | go : PTerm' nm -> List (Arg' nm) -> (PTerm' nm, List (Arg' nm))
24 | go (PApp fc f t) = go f . (Explicit fc t ::)
25 | go (PAutoApp fc f t) = go f . (Auto fc t ::)
26 | go (PNamedApp fc f n t) = go f . (Named fc n t ::)
27 | go (PBracketed fc f) = go f
29 | go (POp fc leftSide op r) =
30 | (PRef op.fc op.val.toName,) . (Explicit fc leftSide.val.getLhs ::) . (Explicit fc r ::)
31 | go (PEq fc l r) = (PRef fc $
embed eqName,) . (Explicit fc l ::) . (Explicit fc r ::)
33 | go (PPair fc l r) = (PRef fc $
embed pairname,) . (Explicit fc l ::) . (Explicit fc r ::)
34 | go (PDPair full fc l ty r)
35 | = (PRef fc $
embed dpairname,)
36 | . (Explicit fc l ::) . (Explicit fc ty ::) . (Explicit fc r ::)
40 | underPis : PTerm' nm -> (List (Maybe Name, Binder (PTerm' nm)), PTerm' nm)
41 | underPis abs = go abs [] where
43 | go : PTerm' nm -> List (Maybe Name, Binder (PTerm' nm)) ->
44 | (List (Maybe Name, Binder (PTerm' nm)), PTerm' nm)
45 | go (PPi fc rig pinfo mn a b) = go b . ((mn, Pi fc rig pinfo a) ::)
46 | go (PBracketed fc abs) = go abs
50 | underLams : PTerm' nm -> (List (PTerm' nm, Binder (PTerm' nm)), PTerm' nm)
51 | underLams fs = go fs [] where
53 | go : PTerm' nm -> List (PTerm' nm, Binder (PTerm' nm)) ->
54 | (List (PTerm' nm, Binder (PTerm' nm)), PTerm' nm)
55 | go (PBracketed fc f) = go f
56 | go (PLam fc rig pinfo pat a sc) = go sc . ((pat, Lam fc rig pinfo a) ::)