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

Commit f7111f1

Browse files
authored
Merge pull request #195 from github/upgrade-to-fused-effects-0.5
Upgrade to fused-effects v0.5.
2 parents 40a8e6d + 1dbb441 commit f7111f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+209
-240
lines changed

semantic-core/semantic-core.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ library
4040
, containers ^>= 0.6
4141
, directory ^>= 1.3
4242
, filepath ^>= 1.4
43-
, fused-effects ^>= 0.4
43+
, fused-effects ^>= 0.5
4444
, haskeline ^>= 0.7.5
4545
, parsers ^>= 0.12.10
4646
, prettyprinter ^>= 1.2.1

semantic-core/src/Analysis/Eval.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ module Analysis.Eval
1111
, Analysis(..)
1212
) where
1313

14-
import Control.Effect
1514
import Control.Effect.Fail
1615
import Control.Effect.Reader
1716
import Control.Monad ((>=>))

semantic-core/src/Control/Effect/Readline.hs

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{-# LANGUAGE DeriveFunctor, ExistentialQuantification, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, KindSignatures, MultiParamTypeClasses, OverloadedStrings, RankNTypes, StandaloneDeriving, TypeApplications, TypeOperators, UndecidableInstances #-}
1+
{-# LANGUAGE DeriveAnyClass, DeriveFunctor, DeriveGeneric, DerivingStrategies, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, KindSignatures, MultiParamTypeClasses, OverloadedStrings, RankNTypes, StandaloneDeriving, TypeApplications, TypeOperators, UndecidableInstances #-}
22

33
module Control.Effect.Readline
44
( Readline (..)
@@ -11,46 +11,40 @@ module Control.Effect.Readline
1111
, ReadlineC (..)
1212
, runReadline
1313
, runReadlineWithHistory
14-
, TransC (..)
1514
, ControlIOC (..)
1615
, runControlIO
1716
) where
1817

1918
import Prelude hiding (print)
2019

2120
import Control.Effect.Carrier
21+
import Control.Effect.Lift
2222
import Control.Effect.Reader
23-
import Control.Effect.Sum
24-
import Control.Monad
2523
import Control.Monad.IO.Class
2624
import Control.Monad.Trans.Class
27-
import Data.Coerce
2825
import Data.Int
2926
import Data.String
3027
import Data.Text.Prettyprint.Doc
3128
import Data.Text.Prettyprint.Doc.Render.Text
29+
import GHC.Generics (Generic1)
3230
import System.Console.Haskeline hiding (Handler, handle)
3331
import System.Directory
3432
import System.FilePath
3533

3634
data Readline (m :: * -> *) k
37-
= Prompt String (Maybe String -> k)
38-
| forall a . Print (Doc a) k
39-
| AskLine (Line -> k)
35+
= Prompt String (Maybe String -> m k)
36+
| Print AnyDoc (m k)
37+
| AskLine (Line -> m k)
38+
deriving stock (Functor, Generic1)
39+
deriving anyclass (Effect, HFunctor)
4040

41-
deriving instance Functor (Readline m)
42-
43-
instance HFunctor Readline where
44-
hmap _ = coerce
45-
46-
instance Effect Readline where
47-
handle state handler = coerce . fmap (handler . (<$ state))
41+
newtype AnyDoc = AnyDoc { unAnyDoc :: forall a . Doc a }
4842

4943
prompt :: (IsString str, Member Readline sig, Carrier sig m) => String -> m (Maybe str)
5044
prompt p = fmap fromString <$> send (Prompt p pure)
5145

5246
print :: (Pretty a, Carrier sig m, Member Readline sig) => a -> m ()
53-
print s = send (Print (pretty s) (pure ()))
47+
print s = send (Print (AnyDoc (pretty s)) (pure ()))
5448

5549
println :: (Pretty a, Carrier sig m, Member Readline sig) => a -> m ()
5650
println s = print s >> print @String "\n"
@@ -63,19 +57,19 @@ newtype Line = Line Int64
6357
increment :: Line -> Line
6458
increment (Line n) = Line (n + 1)
6559

66-
newtype ReadlineC m a = ReadlineC { runReadlineC :: ReaderC Line (TransC InputT m) a }
67-
deriving (Applicative, Functor, Monad, MonadIO)
60+
newtype ReadlineC m a = ReadlineC { runReadlineC :: ReaderC Line (LiftC (InputT m)) a }
61+
deriving newtype (Applicative, Functor, Monad, MonadIO)
6862

6963
runReadline :: MonadException m => Prefs -> Settings m -> ReadlineC m a -> m a
70-
runReadline prefs settings = runInputTWithPrefs prefs settings . runTransC . runReader (Line 0) . runReadlineC
64+
runReadline prefs settings = runInputTWithPrefs prefs settings . runM . runReader (Line 0) . runReadlineC
7165

72-
instance (Carrier sig m, Effect sig, MonadException m, MonadIO m) => Carrier (Readline :+: sig) (ReadlineC m) where
66+
instance (MonadException m, MonadIO m) => Carrier (Readline :+: Lift (InputT m)) (ReadlineC m) where
7367
eff (L (Prompt prompt k)) = ReadlineC $ do
74-
str <- lift (TransC (getInputLine (cyan <> prompt <> plain)))
68+
str <- lift (lift (getInputLine (cyan <> prompt <> plain)))
7569
local increment (runReadlineC (k str))
7670
where cyan = "\ESC[1;36m\STX"
7771
plain = "\ESC[0m\STX"
78-
eff (L (Print text k)) = liftIO (putDoc text) *> k
72+
eff (L (Print text k)) = liftIO (putDoc (unAnyDoc text)) *> k
7973
eff (L (AskLine k)) = ReadlineC ask >>= k
8074
eff (R other) = ReadlineC (eff (R (handleCoercible other)))
8175

@@ -93,19 +87,12 @@ runReadlineWithHistory block = do
9387

9488
runReadline prefs settings block
9589

96-
-- | Promote a monad transformer into an effect.
97-
newtype TransC t (m :: * -> *) a = TransC { runTransC :: t m a }
98-
deriving (Applicative, Functor, Monad, MonadIO, MonadTrans)
99-
100-
instance (Carrier sig m, Effect sig, Monad (t m), MonadTrans t) => Carrier sig (TransC t m) where
101-
eff = TransC . join . lift . eff . handle (pure ()) (pure . (runTransC =<<))
102-
10390
runControlIO :: (forall x . m x -> IO x) -> ControlIOC m a -> m a
10491
runControlIO handler = runReader (Handler handler) . runControlIOC
10592

10693
-- | This exists to work around the 'MonadException' constraint that haskeline entails.
10794
newtype ControlIOC m a = ControlIOC { runControlIOC :: ReaderC (Handler m) m a }
108-
deriving (Applicative, Functor, Monad, MonadIO)
95+
deriving newtype (Applicative, Functor, Monad, MonadIO)
10996

11097
newtype Handler m = Handler (forall x . m x -> IO x)
11198

semantic-core/src/Data/Core/Pretty.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ module Data.Core.Pretty
88
, prettyCore
99
) where
1010

11-
import Control.Effect
1211
import Control.Effect.Reader
1312
import Data.Core
1413
import Data.File

semantic-core/src/Data/Loc.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import Control.Effect.Carrier
1515
import Control.Effect.Error
1616
import Control.Effect.Fail
1717
import Control.Effect.Reader
18-
import Control.Effect.Sum
1918
import Data.Text (Text, pack)
2019
import Data.Text.Prettyprint.Doc (Pretty (..))
2120
import GHC.Stack

semantic-core/src/Data/Name.hs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ module Data.Name
1616
) where
1717

1818
import Control.Applicative
19-
import Control.Effect
2019
import Control.Effect.Carrier
2120
import Control.Effect.Reader
2221
import Control.Effect.State
23-
import Control.Effect.Sum
2422
import Control.Monad.Fail
2523
import Control.Monad.IO.Class
2624
import qualified Data.Char as Char
@@ -99,14 +97,14 @@ namespace s m = send (Namespace s m pure)
9997

10098

10199
data Naming m k
102-
= Gensym Text (Gensym -> k)
103-
| forall a . Namespace Text (m a) (a -> k)
100+
= Gensym Text (Gensym -> m k)
101+
| forall a . Namespace Text (m a) (a -> m k)
104102

105-
deriving instance Functor (Naming m)
103+
deriving instance Functor m => Functor (Naming m)
106104

107105
instance HFunctor Naming where
108-
hmap _ (Gensym s k) = Gensym s k
109-
hmap f (Namespace s m k) = Namespace s (f m) k
106+
hmap f (Gensym s k) = Gensym s (f . k)
107+
hmap f (Namespace s m k) = Namespace s (f m) (f . k)
110108

111109
instance Effect Naming where
112110
handle state handler (Gensym s k) = Gensym s (handler . (<$ state) . k)

semantic.cabal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ common dependencies
5555
, fastsum ^>= 0.1.1.0
5656
, filepath ^>= 1.4.2.1
5757
, free ^>= 5.1
58-
, fused-effects ^>= 0.4.0.0
59-
, fused-effects-exceptions ^>= 0.1.1.0
58+
, fused-effects ^>= 0.5.0.0
59+
, fused-effects-exceptions ^>= 0.2.0.0
6060
, hashable ^>= 1.2.7.0
6161
, tree-sitter ^>= 0.1.0.0
6262
, mtl ^>= 2.2.2

src/Analysis/Abstract/Graph.hs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ module Analysis.Abstract.Graph
1919
import Algebra.Graph.Export.Dot hiding (vertexName)
2020
import Control.Abstract hiding (Function(..))
2121
import Control.Effect.Carrier
22-
import Control.Effect.Sum
2322
import Data.Abstract.BaseError
2423
import Data.Abstract.Declarations
2524
import Data.Abstract.Module (Module (moduleInfo), ModuleInfo (..))
@@ -150,20 +149,20 @@ graphingModuleInfo recur m = do
150149
_ -> pure ()
151150

152151
eavesdrop :: Evaluator term address value (EavesdropC address value m) a
153-
-> (forall x . Modules address value m (m x) -> Evaluator term address value m ())
152+
-> (forall x . Modules address value m x -> Evaluator term address value m ())
154153
-> Evaluator term address value m a
155154
eavesdrop m f = raiseHandler (runEavesdropC (runEvaluator . f)) m
156155

157-
newtype EavesdropC address value m a = EavesdropC ((forall x . Modules address value m (m x) -> m ()) -> m a)
158-
deriving (Alternative, Applicative, Functor, Monad) via (ReaderC (forall x . Modules address value m (m x) -> m ()) m)
156+
newtype EavesdropC address value m a = EavesdropC ((forall x . Modules address value m x -> m ()) -> m a)
157+
deriving (Alternative, Applicative, Functor, Monad) via (ReaderC (forall x . Modules address value m x -> m ()) m)
159158

160-
runEavesdropC :: (forall x . Modules address value m (m x) -> m ()) -> EavesdropC address value m a -> m a
159+
runEavesdropC :: (forall x . Modules address value m x -> m ()) -> EavesdropC address value m a -> m a
161160
runEavesdropC f (EavesdropC m) = m f
162161

163162
instance (Carrier sig m, Member (Modules address value) sig, Applicative m) => Carrier sig (EavesdropC address value m) where
164163
eff op
165-
| Just eff <- prj op = EavesdropC (\ handler -> let eff' = handlePure (runEavesdropC handler) eff in handler eff' *> send eff')
166-
| otherwise = EavesdropC (\ handler -> eff (handlePure (runEavesdropC handler) op))
164+
| Just eff <- prj op = EavesdropC (\ handler -> let eff' = hmap (runEavesdropC handler) eff in handler eff' *> send eff')
165+
| otherwise = EavesdropC (\ handler -> eff (hmap (runEavesdropC handler) op))
167166

168167
-- | Add an edge from the current package to the passed vertex.
169168
packageInclusion :: ( Member (Reader PackageInfo) sig

src/Control/Abstract/Context.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ module Control.Abstract.Context
1212
, withCurrentCallStack
1313
) where
1414

15-
import Control.Effect
1615
import Control.Effect.Reader
1716
import Control.Effect.State
1817
import Data.Abstract.Module

src/Control/Abstract/Evaluator.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ module Control.Abstract.Evaluator
1717
, module X
1818
) where
1919

20-
import Control.Effect as X
2120
import Control.Effect.Carrier
2221
import Control.Effect.Error as X
2322
import Control.Effect.Fresh as X

0 commit comments

Comments
 (0)