Skip to content

Commit c23e96e

Browse files
Define Symbol separately
1 parent 124ff8e commit c23e96e

File tree

5 files changed

+41
-10
lines changed

5 files changed

+41
-10
lines changed

spago.dhall

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
{ name = "node-event-emitters"
22
, dependencies =
3-
[ "effect"
4-
, "either"
5-
, "functions"
6-
, "prelude"
7-
, "unsafe-coerce"
8-
]
3+
[ "effect", "either", "functions", "nullable", "prelude", "unsafe-coerce" ]
94
, packages = ./packages.dhall
105
, sources = [ "src/**/*.purs" ]
116
}

src/Node/EventEmitter.purs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
module Node.EventEmitter
4141
( EventEmitter
4242
, new
43-
, JsSymbol
4443
, SymbolOrStr
4544
, eventNames
4645
, getMaxListeners
@@ -67,6 +66,7 @@ import Data.Either (Either(..))
6766
import Data.Function.Uncurried (Fn3, runFn3)
6867
import Effect (Effect)
6968
import Effect.Uncurried (EffectFn1, EffectFn2, EffectFn3, EffectFn4, mkEffectFn1, mkEffectFn4, runEffectFn1, runEffectFn2, runEffectFn3, runEffectFn4)
69+
import Node.Symbol (JsSymbol)
7070
import Unsafe.Coerce (unsafeCoerce)
7171

7272
foreign import data EventEmitter :: Type
@@ -78,12 +78,15 @@ foreign import data SymbolOrStr :: Type
7878

7979
foreign import eventNamesImpl :: EventEmitter -> Array SymbolOrStr
8080

81-
foreign import data JsSymbol :: Type
82-
8381
eventNames :: EventEmitter -> Array (Either JsSymbol String)
8482
eventNames ee = map (\x -> runFn3 symbolOrStr Left Right x) $ eventNamesImpl ee
8583

86-
foreign import symbolOrStr :: Fn3 (forall a. JsSymbol -> Either JsSymbol a) (forall b. String -> Either b String) SymbolOrStr (Either JsSymbol String)
84+
foreign import symbolOrStr
85+
:: Fn3
86+
(forall a. JsSymbol -> Either JsSymbol a)
87+
(forall b. String -> Either b String)
88+
SymbolOrStr
89+
(Either JsSymbol String)
8790

8891
foreign import getMaxListenersImpl :: EffectFn1 EventEmitter Int
8992

src/Node/Symbol.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const showSymbolImpl = (s) => s.toString();
2+
export const forImpl = (s) => Symbol.for(s);
3+
export const keyForImpl = (s) => Symbol.keyFor(s);

src/Node/Symbol.purs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module Node.Symbol where
2+
3+
import Prelude
4+
5+
import Data.Function.Uncurried (Fn1, runFn1)
6+
import Data.Maybe (Maybe)
7+
import Data.Nullable (Nullable, toMaybe)
8+
import Effect (Effect)
9+
import Effect.Uncurried (EffectFn1, runEffectFn1)
10+
11+
foreign import data JsSymbol :: Type
12+
13+
instance Show JsSymbol where
14+
show x = showSymbol x
15+
16+
showSymbol :: JsSymbol -> String
17+
showSymbol s = runFn1 showSymbolImpl s
18+
19+
foreign import showSymbolImpl :: Fn1 (JsSymbol) (String)
20+
21+
for :: String -> Effect JsSymbol
22+
for s = runEffectFn1 forImpl s
23+
24+
foreign import forImpl :: EffectFn1 (String) (JsSymbol)
25+
26+
keyFor :: JsSymbol -> Effect (Maybe String)
27+
keyFor s = map toMaybe $ runEffectFn1 keyForImpl s
28+
29+
foreign import keyForImpl :: EffectFn1 (JsSymbol) (Nullable String)

test.dhall

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
, "either"
66
, "foldable-traversable"
77
, "functions"
8+
, "nullable"
89
, "prelude"
910
, "refs"
1011
, "spec"

0 commit comments

Comments
 (0)