Skip to content

Commit 94ce7ef

Browse files
committed
Move purescript-symbols in
1 parent dc51981 commit 94ce7ef

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/Data/Symbol.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"use strict";
2+
3+
// module Data.Symbol
4+
5+
exports.unsafeCoerce = function (arg) {
6+
return arg;
7+
};
8+

src/Data/Symbol.purs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module Data.Symbol
2+
( class IsSymbol
3+
, reflectSymbol
4+
, reifySymbol
5+
, SProxy(..)
6+
) where
7+
8+
-- | A value-level proxy for a type-level symbol.
9+
data SProxy (sym :: Symbol) = SProxy
10+
11+
-- | A class for known symbols
12+
class IsSymbol (sym :: Symbol) where
13+
reflectSymbol :: SProxy sym -> String
14+
15+
-- local definition for use in `reifySymbol`
16+
foreign import unsafeCoerce :: forall a b. a -> b
17+
18+
reifySymbol :: forall r. String -> (forall sym. IsSymbol sym => SProxy sym -> r) -> r
19+
reifySymbol s f = coerce f { reflectSymbol: \_ -> s } SProxy where
20+
coerce
21+
:: (forall sym1. IsSymbol sym1 => SProxy sym1 -> r)
22+
-> { reflectSymbol :: SProxy "" -> String } -> SProxy "" -> r
23+
coerce = unsafeCoerce
24+

0 commit comments

Comments
 (0)