blob: 7dff735ac13be2f18a4efca44353aa82da67f35b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
module SOAS.Algebra
import SOAS.Context
import SOAS.Family
import SOAS.Strength
import SOAS.Structure
import SOAS.Var
public export
record (.MonoidStruct)
(signature : type.SortedFunctor)
(x : type.SortedFamily) where
constructor MkSignatureMonoid
mon : type.MonStruct x
alg : signature x -|> x
public export
record (.MetaAlg)
(signature : type.SortedFunctor)
(meta : type.SortedFamily)
(a : type.SortedFamily) where
constructor MkMetaAlg
alg : signature a -|> a
var : Var -|> a
mvar : meta -|> (a ^ a)
export
traverse : {0 p,a : type.SortedFamily} ->
{0 signature : type.SortedFunctor} ->
(functoriality : signature.Map) =>
(str : Strength signature) =>
(coalg : type.PointedCoalgStruct p) =>
(alg : signature a -|> a) ->
(phi : p -|> a) ->
(chi : meta -|> (a ^ a)) -> signature.MetaAlg meta (a ^ p)
traverse {p,a} alg phi chi = MkMetaAlg
{ alg = \h,s => alg $ str.str h s
, var = \v,s => phi (s v)
, mvar = \m,e,s => chi m (\v => e v s)
}
|