Skip to content

Commit d6e0728

Browse files
committed
Use/reexport solved type classes of Prim
1 parent 6f85b79 commit d6e0728

File tree

4 files changed

+42
-114
lines changed

4 files changed

+42
-114
lines changed

src/Type/Data/Ordering.purs

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,21 @@
11
module Type.Data.Ordering
2-
( kind Ordering
3-
, LT
4-
, EQ
5-
, GT
2+
( module Prim.Ordering
63
, OProxy(..)
74
, class IsOrdering
85
, reflectOrdering
96
, reifyOrdering
10-
, class AppendOrdering
11-
, appendOrdering
12-
, class InvertOrdering
13-
, invertOrdering
7+
, class Append
8+
, append
9+
, class Invert
10+
, invert
1411
, class Equals
1512
, equals
1613
) where
1714

15+
import Prim.Ordering (kind Ordering, LT, EQ, GT)
1816
import Data.Ordering (Ordering(..))
1917
import Type.Data.Boolean (kind Boolean, True, False, BProxy(..))
2018

21-
foreign import kind Ordering
22-
foreign import data LT :: Ordering
23-
foreign import data EQ :: Ordering
24-
foreign import data GT :: Ordering
25-
2619
-- | Value proxy for `Ordering` types
2720
data OProxy (ordering :: Ordering) = OProxy
2821

@@ -42,27 +35,27 @@ reifyOrdering GT f = f (OProxy :: OProxy GT)
4235

4336
-- | Append two `Ordering` types together
4437
-- | Reflective of the semigroup for value level `Ordering`
45-
class AppendOrdering (lhs :: Ordering)
46-
(rhs :: Ordering)
47-
(output :: Ordering) |
48-
lhs -> rhs output
49-
instance appendOrderingLT :: AppendOrdering LT rhs LT
50-
instance appendOrderingEQ :: AppendOrdering EQ rhs rhs
51-
instance appendOrderingGT :: AppendOrdering GT rhs GT
38+
class Append (lhs :: Ordering)
39+
(rhs :: Ordering)
40+
(output :: Ordering) |
41+
lhs -> rhs output
42+
instance appendOrderingLT :: Append LT rhs LT
43+
instance appendOrderingEQ :: Append EQ rhs rhs
44+
instance appendOrderingGT :: Append GT rhs GT
5245

53-
appendOrdering :: forall l r o. AppendOrdering l r o => OProxy l -> OProxy r -> OProxy o
54-
appendOrdering _ _ = OProxy
46+
append :: forall l r o. Append l r o => OProxy l -> OProxy r -> OProxy o
47+
append _ _ = OProxy
5548

5649
-- | Invert an `Ordering`
57-
class InvertOrdering (ordering :: Ordering)
58-
(result :: Ordering) |
59-
ordering -> result
60-
instance invertOrderingLT :: InvertOrdering LT GT
61-
instance invertOrderingEQ :: InvertOrdering EQ EQ
62-
instance invertOrderingGT :: InvertOrdering GT LT
50+
class Invert (ordering :: Ordering)
51+
(result :: Ordering) |
52+
ordering -> result
53+
instance invertOrderingLT :: Invert LT GT
54+
instance invertOrderingEQ :: Invert EQ EQ
55+
instance invertOrderingGT :: Invert GT LT
6356

64-
invertOrdering :: forall i o. InvertOrdering i o => OProxy i -> OProxy o
65-
invertOrdering _ = OProxy
57+
invert :: forall i o. Invert i o => OProxy i -> OProxy o
58+
invert _ = OProxy
6659

6760
class Equals (lhs :: Ordering)
6861
(rhs :: Ordering)

src/Type/Data/Symbol.purs

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,35 @@
11
module Type.Data.Symbol
2-
( module Data.Symbol
3-
, class CompareSymbol
4-
, compareSymbol
5-
, class AppendSymbol
6-
, appendSymbol
2+
( module Prim.Symbol
3+
, module Data.Symbol
4+
, append
5+
, compare
6+
, uncons
77
, class Equals
88
, equals
9-
, class ConsSymbol
10-
, unconsSymbol
119
) where
1210

11+
import Prim.Symbol (class Append, class Compare, class Cons)
1312
import Data.Symbol (SProxy(..), class IsSymbol, reflectSymbol, reifySymbol)
1413
import Type.Data.Ordering (OProxy(..), kind Ordering, EQ)
1514
import Type.Data.Ordering (class Equals) as Ordering
1615
import Type.Data.Boolean (kind Boolean, BProxy(..))
1716

18-
-- | Compare two `Symbol` types
19-
class CompareSymbol (lhs :: Symbol)
20-
(rhs :: Symbol)
21-
(out :: Ordering) |
22-
lhs rhs -> out
17+
compare :: forall l r o. Compare l r o => SProxy l -> SProxy r -> OProxy o
18+
compare _ _ = OProxy
2319

24-
compareSymbol :: forall l r o. CompareSymbol l r o => SProxy l -> SProxy r -> OProxy o
25-
compareSymbol _ _ = OProxy
20+
append :: forall l r o. Append l r o => SProxy l -> SProxy r -> SProxy o
21+
append _ _ = SProxy
2622

27-
28-
-- | Append two `Symbol` types together
29-
class AppendSymbol (lhs :: Symbol)
30-
(rhs :: Symbol)
31-
(out :: Symbol) |
32-
lhs rhs -> out, lhs out -> rhs, rhs out -> lhs
33-
34-
appendSymbol :: forall l r o. AppendSymbol l r o => SProxy l -> SProxy r -> SProxy o
35-
appendSymbol _ _ = SProxy
36-
37-
class ConsSymbol (head :: Symbol)
38-
(tail :: Symbol)
39-
(sym :: Symbol) |
40-
sym -> head tail, head tail -> sym
41-
42-
unconsSymbol :: forall h t s. ConsSymbol h t s => SProxy s -> {head :: SProxy h, tail :: SProxy t}
43-
unconsSymbol _ = {head : SProxy, tail : SProxy}
23+
uncons :: forall h t s. Cons h t s => SProxy s -> {head :: SProxy h, tail :: SProxy t}
24+
uncons _ = {head : SProxy, tail : SProxy}
4425

4526
class Equals (lhs :: Symbol)
4627
(rhs :: Symbol)
4728
(out :: Boolean) |
4829
lhs rhs -> out
4930

5031
instance equalsSymbol
51-
:: (CompareSymbol lhs rhs ord,
32+
:: (Compare lhs rhs ord,
5233
Ordering.Equals EQ ord out)
5334
=> Equals lhs rhs out
5435

src/Type/Prelude.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module Type.Prelude
1010
import Type.Data.Boolean (kind Boolean, True, False, BProxy(..), class IsBoolean, reflectBoolean, reifyBoolean)
1111
import Type.Data.Ordering (kind Ordering, LT, EQ, GT, OProxy(..), class IsOrdering, reflectOrdering, reifyOrdering)
1212
import Type.Proxy (Proxy(..))
13-
import Type.Data.Symbol (SProxy(..), class IsSymbol, reflectSymbol, reifySymbol, class CompareSymbol, compareSymbol, class AppendSymbol, appendSymbol)
13+
import Type.Data.Symbol (SProxy(..), class IsSymbol, reflectSymbol, reifySymbol, class Compare, compare, class Append, append, class Cons, uncons)
1414
import Type.Equality (class TypeEquals, from, to)
15-
import Type.Row (class RowLacks, class RowToList, class ListToRow, RProxy(..), RLProxy(..))
15+
import Type.Row (class Lacks, class RowToList, class ListToRow, RProxy(..), RLProxy(..))
1616

src/Type/Row.purs

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
module Type.Row
22
( RProxy(..)
3-
, class RowLacks
4-
, class RowLacking
5-
, kind RowList
6-
, Nil
7-
, Cons
3+
, module Prim.Row
4+
, module Prim.RowList
85
, RLProxy(..)
9-
, class RowToList
106
, class ListToRow
117
, class RowListRemove
128
, class RowListSet
@@ -16,58 +12,16 @@ module Type.Row
1612
, type (+)
1713
) where
1814

19-
import Prim.Row (class Cons, class Union)
15+
import Prim.Row (class Lacks, class Nub, class Cons)
16+
import Prim.RowList (kind RowList, Cons, Nil, class RowToList)
2017
import Type.Equality (class TypeEquals)
2118
import Type.Data.Symbol as Symbol
2219
import Type.Data.Boolean as Boolean
2320

2421
data RProxy (row :: # Type) = RProxy
2522

26-
-- Must not be exported
27-
foreign import data Entry :: Type
28-
29-
-- | If you get "No type class instance was found" for this class, then your
30-
-- | `row` shouldn't contain the label `key`.
31-
class RowLacking (entry :: Type)
32-
(key :: Symbol)
33-
(typ :: Type)
34-
(row :: # Type) |
35-
entry typ -> key row
36-
37-
instance rowLacking :: RowLacking entry key entry row
38-
39-
-- | Encodes the constraint that a given row does not contain a specific key.
40-
class RowLacks (key :: Symbol)
41-
(row :: # Type)
42-
43-
-- Append `Entry` at label `key` to the right of `row` then lookup `key` on the
44-
-- left - if we check via instance solving that the `typ` we get back is
45-
-- `Entry`, then `row` lacks `key`. In the case that `row` doesn't lack
46-
-- `key`, we get a "No type class instance found" error for:
47-
-- `RowLacking Entry key typ row`.
48-
instance rowLacks
49-
:: ( Cons key Entry () keyEntry
50-
, Union row keyEntry rowKeyEntry
51-
, Cons key typ ignored rowKeyEntry
52-
, RowLacking Entry key typ row )
53-
=> RowLacks key row
54-
55-
56-
-- | A type-level list representation of a row
57-
foreign import kind RowList
58-
foreign import data Nil :: RowList
59-
foreign import data Cons :: Symbol -> Type -> RowList -> RowList
60-
6123
data RLProxy (rowList :: RowList) = RLProxy
6224

63-
-- | Extract the collection of entries in a closed row of types.
64-
-- | The list of entries is sorted by label and preserves duplicates.
65-
-- | The inverse of this operation is `ListToRow`.
66-
-- | Solved by the compiler.
67-
class RowToList (row :: # Type)
68-
(list :: RowList) |
69-
row -> list
70-
7125
-- | Convert a RowList to a row of types.
7226
-- | The inverse of this operation is `RowToList`.
7327
class ListToRow (list :: RowList)

0 commit comments

Comments
 (0)