Skip to content

Commit 505f286

Browse files
committed
Simplify the encoder type
1 parent 93055a4 commit 505f286

File tree

5 files changed

+43
-56
lines changed

5 files changed

+43
-56
lines changed

experiments/idris/src/Fathom/Base.idr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ parameters (Source : Type, Target : Type)
3030
Decode : Type
3131
Decode = Target -> Maybe (Source, Target)
3232

33-
||| Encoders take a _source value_ and _remaining target value_ and produce either:
33+
||| Encoders take a _source value_ and produce either:
3434
|||
35-
||| - an _updated target value_
35+
||| - a _target value_
3636
||| - or nothing if in error occurred
3737
|||
3838
||| @ Source The type of source values (usually an in-memory data structure)
3939
||| @ Target The type of target values (usually a byte-stream)
4040
public export
4141
Encode : Type
42-
Encode = Source -> Target -> Maybe Target
42+
Encode = Source -> Maybe Target
4343

4444

4545
----------------------

experiments/idris/src/Fathom/Closed/IndexedInductive.idr

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,14 @@ decode (Bind f1 f2) buffer = do
5656
5757
export
5858
encode : {0 Rep : Type} -> (f : FormatOf Rep) -> Encode Rep (Colist a)
59-
encode End () _ = Just []
60-
encode (Pure x) (MkSing _) buffer = Just buffer
61-
encode (Skip f def) () buffer = do
62-
encode f def buffer
63-
encode (Repeat Z f) [] buffer = Just buffer
64-
encode (Repeat (S len) f) (x :: xs) buffer = do
65-
buffer' <- encode (Repeat len f) xs buffer
66-
encode f x buffer'
67-
encode (Bind f1 f2) (x ** y) buffer = do
68-
buffer' <- encode (f2 x) y buffer
69-
encode f1 x buffer'
59+
encode End () = Just []
60+
encode (Pure x) (MkSing _) = Just []
61+
encode (Skip f def) () = encode f def
62+
encode (Repeat Z f) [] = Just []
63+
encode (Repeat (S len) f) (x :: xs) =
64+
[| encode f x <+> encode (Repeat len f) xs |]
65+
encode (Bind f1 f2) (x ** y) =
66+
[| encode f1 x <+> encode (f2 x) y |]
7067
7168
7269
-----------------

experiments/idris/src/Fathom/Closed/InductiveRecursive.idr

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -119,25 +119,22 @@ decode (Bind f1 f2) buffer = do
119119

120120
export
121121
encode : (f : Format) -> Encode (Rep f) (Colist a)
122-
encode End () _ = Just []
123-
encode (Pure x) (MkSing _) buffer = Just buffer
124-
encode (Skip f def) () buffer = do
125-
encode f def buffer
126-
encode (Repeat Z f) [] buffer = Just buffer
127-
encode (Repeat (S len) f) (x :: xs) buffer = do
128-
buffer' <- encode (Repeat len f) xs buffer
129-
encode f x buffer'
130-
encode (Bind f1 f2) (x ** y) buffer = do
131-
buffer' <- encode (f2 x) y buffer
132-
encode f1 x buffer'
122+
encode End () = Just []
123+
encode (Pure x) (MkSing _) = Just []
124+
encode (Skip f def) () = encode f def
125+
encode (Repeat Z f) [] = Just []
126+
encode (Repeat (S len) f) (x :: xs) = do
127+
[| encode f x <+> encode (Repeat len f) xs |]
128+
encode (Bind f1 f2) (x ** y) = do
129+
[| encode f1 x <+> encode (f2 x) y |]
133130
-- Questionable format descriptions
134-
-- encode (OrPure True f _) x buffer = encode f x buffer
135-
-- encode (OrPure False _ def) x buffer = Just buffer
136-
-- encode (OfSing f r) x buffer = do
137-
-- buffer' <- encode f ?todo_x buffer
131+
-- encode (OrPure True f _) x = encode f x
132+
-- encode (OrPure False _ def) x = Just []
133+
-- encode (OfSing f r) x = do
134+
-- buffer' <- encode f ?todo_x
138135
-- ?todo_encode
139-
-- encode (OfEq f _ {prf}) x buffer = do
140-
-- encode f (rewrite prf in x) buffer
136+
-- encode (OfEq f _ {prf}) x = do
137+
-- encode f (rewrite prf in x)
141138

142139

143140
-----------------

experiments/idris/src/Fathom/Closed/InductiveRecursiveCustom.idr

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,15 @@ decode (Custom f) buffer = f.decode buffer
8585
8686
export
8787
encode : (f : Format) -> Encode (Rep f) ByteStream
88-
encode End () _ = Just []
89-
encode (Pure x) (MkSing _) buffer = Just buffer
90-
encode (Skip f def) () buffer = do
91-
encode f def buffer
92-
encode (Repeat Z f) [] buffer = Just buffer
93-
encode (Repeat (S len) f) (x :: xs) buffer = do
94-
buffer' <- encode (Repeat len f) xs buffer
95-
encode f x buffer'
96-
encode (Bind f1 f2) (x ** y) buffer = do
97-
buffer' <- encode (f2 x) y buffer
98-
encode f1 x buffer'
99-
encode (Custom f) x buffer = f.encode x buffer
88+
encode End () = Just []
89+
encode (Pure x) (MkSing _) = Just []
90+
encode (Skip f def) () = encode f def
91+
encode (Repeat Z f) [] = Just []
92+
encode (Repeat (S len) f) (x :: xs) =
93+
[| encode f x <+> encode (Repeat len f) xs |]
94+
encode (Bind f1 f2) (x ** y) =
95+
[| encode f1 x <+> encode (f2 x) y |]
96+
encode (Custom f) x = f.encode x
10097
10198
10299
--------------------
@@ -112,8 +109,7 @@ u8 = Custom (MkCustomFormat
112109
case buffer of
113110
[] => Nothing
114111
x :: buffer => Just (x, buffer)
115-
, encode = \x, buffer =>
116-
Just (x :: buffer)
112+
, encode = \x => Just [x]
117113
})
118114
119115

experiments/idris/src/Fathom/Open/Record.idr

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ end = MkFormat { Rep, decode, encode } where
3737
decode (_::_) = Nothing
3838

3939
encode : Encode Rep BitStream
40-
encode () _ = Just []
40+
encode () = Just []
4141

4242
public export
4343
fail : Format
@@ -61,7 +61,7 @@ pure x = MkFormat { Rep, decode, encode } where
6161
decode buffer = Just (MkSing x, buffer)
6262

6363
encode : Encode Rep BitStream
64-
encode (MkSing _) buffer = Just buffer
64+
encode (MkSing _) = Just []
6565

6666
public export
6767
skip : (f : Format) -> (def : f.Rep) -> Format
@@ -75,8 +75,7 @@ skip f def = MkFormat { Rep, decode, encode } where
7575
Just ((), buffer')
7676

7777
encode : Encode Rep BitStream
78-
encode () buffer = do
79-
f.encode def buffer
78+
encode () = f.encode def
8079

8180

8281
public export
@@ -97,10 +96,9 @@ repeat len f = MkFormat { Rep, decode, encode } where
9796
encode : Encode Rep BitStream
9897
encode = go len where
9998
go : (len : Nat) -> Encode (Vect len f.Rep) BitStream
100-
go 0 [] buffer = Just buffer
101-
go (S len) (x :: xs) buffer = do
102-
buffer' <- go len xs buffer
103-
f.encode x buffer'
99+
go 0 [] = Just []
100+
go (S len) (x :: xs) =
101+
[| f.encode x <+> go len xs |]
104102
105103
106104
public export
@@ -116,6 +114,5 @@ bind f1 f2 = MkFormat { Rep, decode, encode } where
116114
Just ((x ** y), buffer'')
117115
118116
encode : Encode Rep BitStream
119-
encode (x ** y) buffer = do
120-
buffer' <- (f2 x).encode y buffer
121-
f1.encode x buffer'
117+
encode (x ** y) =
118+
[| f1.encode x <+> (f2 x).encode y |]

0 commit comments

Comments
 (0)