Skip to content

Commit 41cfd04

Browse files
committed
feat: Add Display typeclass
1 parent e02e664 commit 41cfd04

File tree

5 files changed

+42
-1
lines changed

5 files changed

+42
-1
lines changed

std/display.glu

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//@NO-IMPLICIT-PRELUDE
2+
//! Value to string conversion, intended for strings passed to users.
3+
4+
/// `Display a` represents a conversion function from `a` to a pretty string.
5+
#[implicit]
6+
type Display a = { display : a -> String }
7+
8+
/// Converts a value into a string.
9+
/// ```
10+
/// let { ? } = import! std.effect
11+
/// let { assert_eq, ? } = import! std.test
12+
///
13+
/// seq assert_eq (display 123) "123"
14+
/// seq assert_eq (display 3.14) "3.14"
15+
/// assert_eq (display "abc") "abc"
16+
/// ```
17+
let display ?d : [Display a] -> a -> String = d.display
18+
19+
{
20+
Display,
21+
display,
22+
}

std/float.glu

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//@NO-IMPLICIT-PRELUDE
22
//! The 64-bit floating point type.
33

4-
let { Semigroup, Monoid, Group, Eq, Ord, Ordering, Num, Show } = import! std.prelude
4+
let { Semigroup, Monoid, Group, Eq, Ord, Ordering, Num, Show, Display } = import! std.prelude
55

66
let additive =
77
let semigroup : Semigroup Float = { append = \x y -> x #Float+ y }
@@ -55,13 +55,18 @@ let show : Show Float = {
5555
show = (import! std.prim).show_float,
5656
}
5757

58+
let display : Display Float = {
59+
display = (import! std.prim).show_float,
60+
}
61+
5862
{
5963
additive,
6064
multiplicative,
6165
eq,
6266
ord,
6367
num,
6468
show,
69+
display,
6570
..
6671
import! std.float.prim
6772
}

std/int.glu

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ let { Group } = import! std.group
77
let { Eq, Ord, Ordering } = import! std.cmp
88
let { Num } = import! std.num
99
let { Show } = import! std.show
10+
let { Display } = import! std.display
1011

1112
let additive =
1213
let semigroup : Semigroup Int = {
@@ -59,13 +60,18 @@ let show : Show Int = {
5960
show = (import! std.prim).show_int,
6061
}
6162

63+
let display : Display Int = {
64+
display = (import! std.prim).show_int,
65+
}
66+
6267
{
6368
additive,
6469
multiplicative,
6570
eq,
6671
ord,
6772
num,
6873
show,
74+
display,
6975
..
7076
import! std.int.prim
7177
}

std/prelude.glu

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ let { Monoid, empty } = import! std.monoid
1313
let { Group } = import! std.group
1414
let { Eq, Ord, Bool, Ordering, (==), (/=), (<), (<=), (>=), (>) } = import! std.cmp
1515
let { Show, show } = import! std.show
16+
let { Display, display } = import! std.display
1617
let { Category, id, compose } = import! std.category
1718
let { Num, (+), (-), (*), (/), negate } = import! std.num
1819
let { Bool, not } = import! std.bool
@@ -64,6 +65,9 @@ let { flat_map } = import! std.monad
6465
Show,
6566
show,
6667

68+
Display,
69+
display,
70+
6771
Option,
6872
Bool,
6973

std/string.glu

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ let prim = import! std.prim
66
let { Semigroup, (<>) } = import! std.semigroup
77
let { Monoid } = import! std.monoid
88
let { Show } = import! std.show
9+
let { Display } = import! std.display
910
let { Eq, Ord, Ordering } = import! std.cmp
1011
let function = import! std.function
1112

@@ -25,10 +26,13 @@ let ord : Ord String = { eq, compare = prim.string_compare }
2526

2627
let show : Show String = { show = \s -> "\"" ++ s ++ "\"" }
2728

29+
let display : Display String = { display = \s -> s }
30+
2831
{
2932
eq,
3033
ord,
3134
show,
35+
display,
3236
semigroup,
3337
monoid,
3438
(++),

0 commit comments

Comments
 (0)