File tree Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Original file line number Diff line number Diff line change
1
+ "use strict" ;
2
+
3
+ // module Data.Symbol
4
+
5
+ exports . unsafeCoerce = function ( arg ) {
6
+ return arg ;
7
+ } ;
8
+
Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments