Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 183a073

Browse files
committed
Merge branch 'modular-mechanics' into great-exportations
2 parents 1f4fded + 128aebc commit 183a073

4 files changed

Lines changed: 11 additions & 20 deletions

File tree

semantic-analysis/src/Analysis/Carrier/Statement/State.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Data.Text (Text)
2424

2525
-- Messages
2626

27-
data Message
27+
newtype Message
2828
= Import (NonEmpty Text)
2929
deriving (Eq, Ord, Show)
3030

semantic-analysis/src/Analysis/Effect/Statement.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{-# LANGUAGE GADTs #-}
22
{-# LANGUAGE KindSignatures #-}
3+
{- |
4+
The @'Statement'@ effect is designed to provide instrumentation for source-level interactions we need visibility into which are nevertheless not (currently) modelled by expressions: e.g. statements, declarations, certain directives, etc.
5+
6+
Currently this is limited to imports, where the value-level semantics are (for many languages) essentially the unit value, but where the effect of bringing an environment and entire subset of the store into scope are essential to track for modular interpretation.
7+
-}
38
module Analysis.Effect.Statement
49
( -- * Statement effect
510
simport

semantic-analysis/src/Analysis/Module.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ instance Semigroup (ModuleSet a) where
2222
m1 <> m2 = ModuleSet ((link m2 <$> getModuleSet m1) <> (link m1 <$> getModuleSet m2))
2323

2424
link :: ModuleSet a -> Module a -> Module a
25-
link (ModuleSet ms) m = Module b' (imports m Set.\\ Map.keysSet ms) (exports m) u' where
26-
(u', b') = foldl' (\ (u, b) -> resolve u b . exports) (unknown m, body m) (Map.restrictKeys ms (imports m))
27-
resolve u b e = (u Set.\\ Map.keysSet e, b . mappend (Map.restrictKeys e u))
25+
link (ModuleSet ms) m = Module body' (imports m Set.\\ Map.keysSet ms) (exports m) unknown' where
26+
(unknown', body') = foldl' (uncurry resolveSymbolsInModule) (unknown m, body m) (Map.restrictKeys ms (imports m))
27+
resolveSymbolsInModule unknown body m = (unknown Set.\\ Map.keysSet (exports m), body . mappend (Map.restrictKeys (exports m) unknown))

semantic-analysis/src/Analysis/Syntax.hs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ module Analysis.Syntax
1010
-- * Abstract interpretation
1111
, eval0
1212
, eval
13-
, evalModule0
14-
, evalModule
1513
-- * Macro-expressible syntax
1614
, let'
1715
, letrec
@@ -26,7 +24,6 @@ import Analysis.Effect.Domain
2624
import Analysis.Effect.Env (Env, bind, lookupEnv)
2725
import Analysis.Effect.Store
2826
import Analysis.File
29-
import Analysis.Module
3027
import Analysis.Name (Name, name, nameI)
3128
import Analysis.Reference as Ref
3229
import Control.Applicative (Alternative (..), liftA3)
@@ -43,12 +40,10 @@ import Data.Foldable (fold)
4340
import Data.Function (fix)
4441
import qualified Data.IntMap as IntMap
4542
import Data.List (sortOn)
46-
import Data.List.NonEmpty (NonEmpty, fromList, toList)
43+
import Data.List.NonEmpty (NonEmpty, fromList)
4744
import Data.Monoid (First (..))
48-
import qualified Data.Set as Set
4945
import Data.String (IsString (..))
50-
import Data.Text (Text, pack)
51-
import qualified Data.Text as Text
46+
import Data.Text (Text)
5247
import qualified Data.Vector as V
5348
import qualified System.Path as Path
5449

@@ -91,15 +86,6 @@ eval eval = \case
9186
foldr (\ (p, a) m -> let' p a m) (eval b) (zip ps as)))
9287

9388

94-
evalModule0 :: (Has (Env addr) sig m, HasLabelled Store (Store addr val) sig m, Has (Dom val) sig m) => Term -> m (Module val)
95-
evalModule0 = evalModule eval0
96-
97-
evalModule :: (Has (Env addr) sig m, HasLabelled Store (Store addr val) sig m, Has (Dom val) sig m) => (Term -> S.StatementC m val) -> (Term -> m (Module val))
98-
evalModule f i = S.runStatement mk (eval f i) where
99-
mk msgs b = pure (Module (const b) (Set.fromList (map formatImport msgs)) mempty mempty)
100-
formatImport (S.Import cs) = name (Text.intercalate (pack ".") (toList cs))
101-
102-
10389
-- Macro-expressible syntax
10490

10591
let' :: (Has (Env addr) sig m, HasLabelled Store (Store addr val) sig m) => Name -> val -> m a -> m a

0 commit comments

Comments
 (0)