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