Skip to content

Commit a727a03

Browse files
authored
Merge pull request #133 from hhefesto/fix-prelude-usage
Fix prelude usage being unnecessarily passed down process
2 parents b456fd8 + 1833003 commit a727a03

5 files changed

Lines changed: 39 additions & 45 deletions

File tree

app/Repl.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ maybeToRight Nothing = Left CompileConversionError
8585
resolveBinding' :: String
8686
-> [(String, UnprocessedParsedTerm)]
8787
-> Maybe Term3
88-
resolveBinding' name bindings = lookup name taggedBindings >>= (rightToMaybe . process taggedBindings)
88+
resolveBinding' name bindings = lookup name taggedBindings >>= (rightToMaybe . process)
8989
where
9090
taggedBindings = (fmap . fmap) (tag DummyLoc) bindings
9191

@@ -107,7 +107,7 @@ printLastExpr eval bindings = do
107107
let compile' x = case compileUnitTest x of
108108
Left err -> Left . show $ err
109109
Right r -> Right r
110-
case compile' =<< process bindings' (DummyLoc :< LetUPF bindings' upt) of
110+
case compile' =<< process (DummyLoc :< LetUPF bindings' upt) of
111111
Left err -> putStrLn err
112112
Right iexpr' -> do
113113
iexpr <- eval (SetEnv (Pair (Defer iexpr') Zero))

src/Telomare/Eval.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ calculateRecursionLimits t3 =
304304

305305
eval2IExpr :: [(String, AnnotatedUPT)] -> String -> Either String IExpr
306306
eval2IExpr prelude str = bimap errorBundlePretty (\x -> DummyLoc :< LetUPF prelude x) (runParser (parseOneExprOrTopLevelDefs prelude) "" str)
307-
>>= process prelude
307+
>>= process
308308
>>= first show . compileUnitTest
309309

310310
tagIExprWithEval :: IExpr -> Cofree IExprF (Int, IExpr)
@@ -361,7 +361,7 @@ tagUPTwithIExpr :: [(String, AnnotatedUPT)]
361361
-> Cofree UnprocessedParsedTermF (Int, Either String IExpr)
362362
tagUPTwithIExpr prelude upt = evalState (para alg upt) 0 where
363363
upt2iexpr :: UnprocessedParsedTerm -> Either String IExpr
364-
upt2iexpr u = process prelude (tag DummyLoc u) >>= first show . compileUnitTest
364+
upt2iexpr u = process (tag DummyLoc u) >>= first show . compileUnitTest
365365
alg :: Base UnprocessedParsedTerm
366366
( UnprocessedParsedTerm
367367
, State Int (Cofree UnprocessedParsedTermF (Int, Either String IExpr))

src/Telomare/Resolver.hs

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -311,21 +311,18 @@ splitExpr t = let (bf, (_,_,m)) = State.runState (splitExpr' t) (toEnum 0, FragI
311311

312312
-- |`makeLambda ps vl t1` makes a `TLam` around `t1` with `vl` as arguments.
313313
-- Automatic recognition of Close or Open type of `TLam`.
314-
makeLambda :: [(String, AnnotatedUPT)] -- ^Bindings
315-
-> String -- ^Variable name
314+
makeLambda :: String -- ^Variable name
316315
-> Term1 -- ^Lambda body
317316
-> Term1
318-
makeLambda bindings str term1@(anno :< _) =
317+
makeLambda str term1@(anno :< _) =
319318
if unbound == Set.empty then anno :< TLamF (Closed str) term1 else anno :< TLamF (Open str) term1
320-
where bindings' = Set.fromList $ fst <$> bindings
321-
v = varsTerm1 term1
322-
unbound = (v \\ bindings') \\ Set.singleton str
319+
where v = varsTerm1 term1
320+
unbound = v \\ Set.singleton str
323321

324322
-- |Transformation from `AnnotatedUPT` to `Term1` validating and inlining `VarUP`s
325-
validateVariables :: [(String, AnnotatedUPT)] -- ^ Prelude
326-
-> AnnotatedUPT
323+
validateVariables :: AnnotatedUPT
327324
-> Either String Term1
328-
validateVariables prelude term =
325+
validateVariables term =
329326
let validateWithEnvironment :: AnnotatedUPT
330327
-> State.StateT (Map String Term1) (Either String) Term1
331328
validateWithEnvironment = \case
@@ -334,7 +331,7 @@ validateVariables prelude term =
334331
State.modify (Map.insert v (anno :< TVarF v))
335332
result <- validateWithEnvironment x
336333
State.put oldState
337-
pure $ makeLambda prelude v result
334+
pure $ makeLambda v result
338335
anno :< VarUPF n -> do
339336
definitionsMap <- State.get
340337
case Map.lookup n definitionsMap of
@@ -430,29 +427,26 @@ addBuiltins aupt = DummyLoc :< LetUPF
430427
aupt
431428

432429
-- |Process an `AnnotatedUPT` to a `Term3` with failing capability.
433-
process :: [(String, AnnotatedUPT)] -- ^Prelude
434-
-> AnnotatedUPT
430+
process :: AnnotatedUPT
435431
-> Either String Term3
436-
process prelude upt = (\dt -> debugTrace ("Resolver process term:\n" <> prettyPrint dt) dt) . splitExpr <$> process2Term2 prelude upt
432+
process upt = (\dt -> debugTrace ("Resolver process term:\n" <> prettyPrint dt) dt) . splitExpr <$> process2Term2 upt
437433

438-
process2Term2 :: [(String, AnnotatedUPT)] -- ^Prelude
439-
-> AnnotatedUPT
434+
process2Term2 :: AnnotatedUPT
440435
-> Either String Term2
441-
process2Term2 prelude = fmap generateAllHashes
442-
. debruijinize [] <=< validateVariables prelude
443-
. removeCaseUPs
444-
. optimizeBuiltinFunctions
445-
. addBuiltins
436+
process2Term2 = fmap generateAllHashes
437+
. debruijinize [] <=< validateVariables
438+
. removeCaseUPs
439+
. optimizeBuiltinFunctions
440+
. addBuiltins
446441

447442
-- |Helper function to compile to Term2
448443
runTelomareParser2Term2 :: TelomareParser AnnotatedUPT -- ^Parser to run
449-
-> [(String, AnnotatedUPT)] -- ^Prelude
450-
-> String -- ^Raw string to be parsed
451-
-> Either String Term2 -- ^Error on Left
452-
runTelomareParser2Term2 parser prelude str =
453-
first errorBundlePretty (runParser parser "" str) >>= process2Term2 prelude
444+
-> String -- ^Raw string to be parsed
445+
-> Either String Term2 -- ^Error on Left
446+
runTelomareParser2Term2 parser str =
447+
first errorBundlePretty (runParser parser "" str) >>= process2Term2
454448

455449
parseMain :: [(String, AnnotatedUPT)] -- ^Prelude: [(VariableName, BindedUPT)]
456-
-> String -- ^Raw string to be parserd.
457-
-> Either String Term3 -- ^Error on Left.
458-
parseMain prelude s = parseWithPrelude prelude s >>= process prelude
450+
-> String -- ^Raw string to be parserd.
451+
-> Either String Term3 -- ^Error on Left.
452+
parseMain prelude s = parseWithPrelude prelude s >>= process

test/ResolverTests.hs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,12 @@ unitTests :: TestTree
126126
unitTests = testGroup "Unit tests"
127127
[
128128
testCase "different values get different hashes" $ do
129-
let res1 = generateAllHashes <$> runTelomareParser2Term2 parseLet [] hashtest0
130-
res2 = generateAllHashes <$> runTelomareParser2Term2 parseLet [] hashtest1
129+
let res1 = generateAllHashes <$> runTelomareParser2Term2 parseLet hashtest0
130+
res2 = generateAllHashes <$> runTelomareParser2Term2 parseLet hashtest1
131131
(res1 == res2) `compare` False @?= EQ
132132
, testCase "same functions have the same hash even with different variable names" $ do
133-
let res1 = generateAllHashes <$> runTelomareParser2Term2 parseLet [] hashtest2
134-
res2 = generateAllHashes <$> runTelomareParser2Term2 parseLet [] hashtest3
133+
let res1 = generateAllHashes <$> runTelomareParser2Term2 parseLet hashtest2
134+
res2 = generateAllHashes <$> runTelomareParser2Term2 parseLet hashtest3
135135
res1 @?= res2
136136
, testCase "Ad hoc user defined types success" $ do
137137
res <- testUserDefAdHocTypes userDefAdHocTypesSuccess
@@ -141,25 +141,25 @@ unitTests = testGroup "Unit tests"
141141
res @?= "MyInt must not be 0\ndone"
142142
, testCase "test automatic open close lambda" $ do
143143
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x -> \\y -> (x, y)"
144-
(forget <$> validateVariables [] res) @?= Right closedLambdaPair
144+
(forget <$> validateVariables res) @?= Right closedLambdaPair
145145
, testCase "test automatic open close lambda 2" $ do
146146
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x y -> (x, y)"
147-
(forget <$> validateVariables [] res) @?= Right closedLambdaPair
147+
(forget <$> validateVariables res) @?= Right closedLambdaPair
148148
, testCase "test automatic open close lambda 3" $ do
149149
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x -> \\y -> \\z -> z"
150-
(forget <$> validateVariables [] res) @?= Right expr6
150+
(forget <$> validateVariables res) @?= Right expr6
151151
, testCase "test automatic open close lambda 4" $ do
152152
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x -> (x, x)"
153-
(forget <$> validateVariables [] res) @?= Right expr5
153+
(forget <$> validateVariables res) @?= Right expr5
154154
, testCase "test automatic open close lambda 5" $ do
155155
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x -> \\x -> \\x -> x"
156-
(forget <$> validateVariables [] res) @?= Right expr4
156+
(forget <$> validateVariables res) @?= Right expr4
157157
, testCase "test automatic open close lambda 6" $ do
158158
res <- runTelomareParser (parseLambda <* scn <* eof) "\\x -> \\y -> \\z -> [x,y,z]"
159-
(forget <$> validateVariables [] res) @?= Right expr3
159+
(forget <$> validateVariables res) @?= Right expr3
160160
, testCase "test automatic open close lambda 7" $ do
161161
res <- runTelomareParser (parseLambda <* scn <* eof) "\\a -> (a, (\\a -> (a,0)))"
162-
(forget <$> validateVariables [] res) @?= Right expr2
162+
(forget <$> validateVariables res) @?= Right expr2
163163
, testCase "test tictactoe.tel" $ do
164164
res <- tictactoe
165165
res @?= fullRunTicTacToeString
@@ -322,7 +322,7 @@ showAllTransformations input = do
322322
-- diff = getGroupedDiff str1 str2
323323
-- section "optimizeBindingsReference" . show $ optimizeBindingsReferenceVar
324324
-- section "Diff optimizeBindingsReference" $ ppDiff diff
325-
let validateVariablesVar = validateVariables prelude optimizeBuiltinFunctionsVar
325+
let validateVariablesVar = validateVariables optimizeBuiltinFunctionsVar
326326
str3 = lines . show $ validateVariablesVar
327327
diff = getGroupedDiff str3 str1
328328
section "validateVariables" . show $ validateVariablesVar

test/Spec.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ qcDecompileIExprAndBackEvalsSame (IExprWrapper x) = pure (showResult $ eval' x)
360360
debruijinize' x = case debruijinize [] x of
361361
Just r -> r
362362
_ -> error "debruijinize error"
363-
validateVariables' x = case validateVariables [] x of
363+
validateVariables' x = case validateVariables x of
364364
Right r -> r
365365
Left e -> error ("validateVariables " <> e)
366366
parseLongExpr' x = case runTelomareParser (scn *> parseLongExpr <* scn) x of

0 commit comments

Comments
 (0)