Skip to content

Commit 1fb24ed

Browse files
authored
Fix operators imports (#6)
1 parent 5066b98 commit 1fb24ed

File tree

4 files changed

+48
-9
lines changed

4 files changed

+48
-9
lines changed

src/Tidy/Codegen/Class.purs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,13 @@ instance FromToken (Qualified Operator) where
278278
instance FromToken SymbolName where
279279
fromToken = case _ of
280280
TokSymbolName Nothing str -> Just (SymbolName str)
281+
TokOperator Nothing str -> Just (SymbolName str)
281282
_ -> Nothing
282283

283284
instance FromToken (Qualified SymbolName) where
284285
fromToken = case _ of
285286
TokSymbolName qual str -> Just (Qualified qual (SymbolName str))
287+
TokOperator qual str -> Just (Qualified qual (SymbolName str))
286288
_ -> Nothing
287289

288290
instance FromToken ModuleName where
@@ -363,7 +365,29 @@ instance ToQualifiedName SymbolName Operator where
363365
instance ToQualifiedName (Name a) a where
364366
toQualifiedName (Name { name, token }) = QualifiedName { module: Nothing, name, token }
365367

366-
instance ToQualifiedName (QualifiedName a) a where
368+
instance ToQualifiedName (QualifiedName SymbolName) Operator where
369+
toQualifiedName (QualifiedName r) = case r.token.value of
370+
TokSymbolName qual op ->
371+
QualifiedName
372+
{ module: qual
373+
, token: toSourceToken (TokOperator qual op)
374+
, name: Operator op
375+
}
376+
_ ->
377+
QualifiedName r { name = coerce r.name }
378+
379+
else instance ToQualifiedName (QualifiedName Operator) SymbolName where
380+
toQualifiedName (QualifiedName r) = case r.token.value of
381+
TokOperator qual op ->
382+
QualifiedName
383+
{ module: qual
384+
, token: toSourceToken (TokSymbolName qual op)
385+
, name: SymbolName op
386+
}
387+
_ ->
388+
QualifiedName r { name = coerce r.name }
389+
390+
else instance ToQualifiedName (QualifiedName a) a where
367391
toQualifiedName = identity
368392

369393
class ToModuleName a where

src/Tidy/Codegen/Monad.purs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,16 @@ import Data.Tuple (Tuple(..), fst, snd)
5555
import Prim.Row as Row
5656
import Prim.RowList (class RowToList, RowList)
5757
import Prim.RowList as RowList
58-
import PureScript.CST.Types (Declaration(..), Export, Foreign(..), Ident, Import, Labeled(..), Module, ModuleName, Name(..), Operator(..), Proper, QualifiedName(..))
58+
import PureScript.CST.Types (Declaration(..), Export, Foreign(..), Ident, Import, Labeled(..), Module, ModuleName, Name(..), Operator, Proper, QualifiedName(..))
5959
import Record as Record
6060
import Record.Builder (Builder)
6161
import Record.Builder as Builder
6262
import Safe.Coerce (coerce)
6363
import Tidy.Codegen (module_)
6464
import Tidy.Codegen as Codegen
65-
import Tidy.Codegen.Class (class ToModuleName, class ToName, class ToToken, toModuleName, toToken)
65+
import Tidy.Codegen.Class (class ToModuleName, class ToName, class ToToken, toModuleName, toQualifiedName, toToken)
6666
import Tidy.Codegen.Common (toSourceToken)
67-
import Tidy.Codegen.Types (Qualified(..), SymbolName(..))
67+
import Tidy.Codegen.Types (Qualified(..), SymbolName)
6868
import Type.Proxy (Proxy(..))
6969

7070
data CodegenExport
@@ -271,11 +271,11 @@ importValue = withQualifiedName (ImportName <<< CodegenImportValue)
271271

272272
-- | Imports a value operator, yield. Use with `importFrom`.
273273
importOp :: forall name. ToToken name (Qualified SymbolName) => name -> ImportName Operator
274-
importOp = withQualifiedName \a b -> ImportName (CodegenImportOp a) (coerce b)
274+
importOp = withQualifiedName \a b -> ImportName (CodegenImportOp a) (toQualifiedName b)
275275

276276
-- | Imports a type operator. Use with `importFrom`.
277277
importTypeOp :: forall name. ToToken name (Qualified SymbolName) => name -> ImportName Operator
278-
importTypeOp = withQualifiedName \a b -> ImportName (CodegenImportTypeOp a) (coerce b)
278+
importTypeOp = withQualifiedName \a b -> ImportName (CodegenImportTypeOp a) (toQualifiedName b)
279279

280280
-- | Imports a class. Use with `importFrom`.
281281
importClass :: forall name. ToToken name (Qualified Proper) => name -> ImportName Proper

test/snapshots/CodegenMonad.output

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
module Test.Monad (getNum) where
1+
module Test.Monad (alt', alt'', getNum) where
22

33
import Prelude
44

5+
import Control.Alt ((<|>))
56
import Data.Map (Map)
67
import Data.Map as Map
78
import Data.Maybe (Maybe(..), maybe)
89

910
getNum :: String -> Map String Int -> Maybe Int
1011
getNum key = maybe (Just 0) <<< Map.lookup key
12+
13+
alt' a b = a <|> b
14+
alt'' a b = (<|>) a b

test/snapshots/CodegenMonad.purs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import Effect (Effect)
66
import Partial.Unsafe (unsafePartial)
77
import PureScript.CST.Types (Module)
88
import Test.Util (log)
9-
import Tidy.Codegen (binaryOp, binderVar, declSignature, declValue, exprApp, exprCtor, exprIdent, exprInt, exprOp, printModule, typeApp, typeArrow, typeCtor)
10-
import Tidy.Codegen.Monad (codegenModule, exporting, importCtor, importFrom, importOpen, importType, importValue, write)
9+
import Tidy.Codegen (binaryOp, binderVar, declSignature, declValue, exprApp, exprCtor, exprIdent, exprInt, exprOp, exprOpName, printModule, typeApp, typeArrow, typeCtor)
10+
import Tidy.Codegen.Monad (codegenModule, exporting, importCtor, importFrom, importOp, importOpen, importType, importTypeOp, importValue, write)
1111

1212
test :: Module Void
1313
test = unsafePartial do
@@ -18,6 +18,7 @@ test = unsafePartial do
1818
maybeFn <- importFrom "Data.Maybe" (importValue "maybe")
1919
mapTy <- importFrom "Data.Map" (importType "Map")
2020
mapLookup <- importFrom "Data.Map" (importValue "Map.lookup")
21+
altOp <- importFrom "Control.Alt" (importOp "<|>")
2122
exporting do
2223
write $ declSignature "getNum" do
2324
typeArrow
@@ -39,6 +40,16 @@ test = unsafePartial do
3940
[ exprIdent "key" ]
4041
)
4142
]
43+
write $ declValue "alt'" [ binderVar "a", binderVar "b" ] do
44+
exprOp (exprIdent "a")
45+
[ binaryOp altOp
46+
(exprIdent "b")
47+
]
48+
write $ declValue "alt''" [ binderVar "a", binderVar "b" ] do
49+
exprApp (exprOpName altOp)
50+
[ exprIdent "a"
51+
, exprIdent "b"
52+
]
4253

4354
main :: Effect Unit
4455
main = log $ printModule test

0 commit comments

Comments
 (0)