packages feed

fused-effects-readline 0.0.0.0 → 0.1.0.0

raw patch · 7 files changed

+75/−32 lines, 7 filesdep +exceptionsdep ~directorydep ~filepathdep ~fused-effectsnew-uploaderPVP ok

version bump matches the API change (PVP)

Dependencies added: exceptions

Dependency ranges changed: directory, filepath, fused-effects, haskeline, prettyprinter

API changes (from Hackage documentation)

- Control.Carrier.Readline.Haskeline: instance System.Console.Haskeline.MonadException.MonadException m => Control.Algebra.Algebra Control.Effect.Readline.Readline (Control.Carrier.Readline.Haskeline.ReadlineC m)
- Control.Effect.Readline: Print :: Doc AnsiStyle -> m k -> Readline m k
- Control.Effect.Readline: Prompt :: String -> (Int -> Maybe String -> m k) -> Readline m k
- Control.Effect.Readline: instance Control.Effect.Class.Effect Control.Effect.Readline.Readline
- Control.Effect.Readline: instance Control.Effect.Class.HFunctor Control.Effect.Readline.Readline
- Control.Effect.Readline: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Effect.Readline.Readline m)
- Control.Effect.Readline: instance GHC.Generics.Generic1 (Control.Effect.Readline.Readline m)
+ Control.Carrier.Readline.Haskeline: instance (Control.Monad.IO.Class.MonadIO m, Control.Monad.Catch.MonadMask m) => Control.Algebra.Algebra Control.Effect.Readline.Readline (Control.Carrier.Readline.Haskeline.ReadlineC m)
+ Control.Effect.Readline: [Print] :: Doc AnsiStyle -> Readline m ()
+ Control.Effect.Readline: [Prompt] :: String -> Readline m (Int, Maybe String)
- Control.Carrier.Readline.Haskeline: runReadline :: MonadException m => Prefs -> Settings m -> ReadlineC m a -> m a
+ Control.Carrier.Readline.Haskeline: runReadline :: (MonadIO m, MonadMask m) => Prefs -> Settings m -> ReadlineC m a -> m a
- Control.Carrier.Readline.Haskeline: runReadlineWithHistory :: MonadException m => ReadlineC m a -> m a
+ Control.Carrier.Readline.Haskeline: runReadlineWithHistory :: (MonadIO m, MonadMask m) => ReadlineC m a -> m a
- Control.Effect.Readline: class (HFunctor sig, Monad m) => Algebra (sig :: Type -> Type -> Type -> Type) (m :: Type -> Type) | m -> sig
+ Control.Effect.Readline: class Monad m => Algebra (sig :: Type -> Type -> Type -> Type) (m :: Type -> Type) | m -> sig
- Control.Effect.Readline: data Readline m k
+ Control.Effect.Readline: data Readline (m :: Type -> Type) (k :: Type)

Files

CHANGELOG.md view
@@ -1,3 +1,10 @@+# v0.1.0.0++- Support for `ghc` 8.10.+- Support for `haskeline` 0.8.+- Support for `fused-effects` 1.1++ # v0.0.0.0  Initial release.
LICENSE view
@@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2019, Rob Rix+Copyright (c) 2019-2020, Rob Rix All rights reserved.  Redistribution and use in source and binary forms, with or without
+ README.md view
@@ -0,0 +1,3 @@+# `fused-effects-readline`++A `readline`-like effect & carrier for `fused-effects`.
fused-effects-readline.cabal view
@@ -1,7 +1,7 @@ cabal-version:       2.2  name:                fused-effects-readline-version:             0.0.0.0+version:             0.1.0.0 synopsis:            A readline-like effect and carrier for fused-effects description:         A readline-like effect and carrier for fused-effects, using haskeline under the hood homepage:            https://github.com/fused-effects/fused-effects-readline@@ -10,11 +10,17 @@ license-file:        LICENSE author:              Rob Rix maintainer:          rob.rix@me.com-copyright:           2019 Rob Rix+copyright:           2019-2020 Rob Rix category:            Development extra-source-files:+  README.md   CHANGELOG.md +tested-with:+  GHC == 8.6.5+  GHC == 8.8.3+  GHC == 8.10.1+ common common   default-language: Haskell2010   ghc-options:@@ -28,10 +34,14 @@     -Wno-name-shadowing     -Wno-safe     -Wno-unsafe-  if (impl(ghc >= 8.6))+  if impl(ghc >= 8.6)     ghc-options: -Wno-star-is-type-  if (impl(ghc >= 8.8))+  if impl(ghc >= 8.8)     ghc-options: -Wno-missing-deriving-strategies+  if impl(ghc >= 8.10)+    ghc-options:+      -Wno-missing-safe-haskell-mode+      -Wno-prepositive-qualified-module  library   import: common@@ -40,15 +50,18 @@     Control.Carrier.Readline.Haskeline     Control.Effect.Readline   build-depends:-      base >= 4.12 && < 5-    , directory ^>= 1.3.3.2-    , filepath ^>= 1.4.2.1-    , fused-effects ^>= 1-    , haskeline ^>= 0.7-    , prettyprinter ^>= 1.5+    , base >= 4.12 && < 5+    , directory ^>= 1.3+    , filepath ^>= 1.4+    , fused-effects ^>= 1.1+    , haskeline >= 0.7 && < 0.9+    , prettyprinter >= 1.5 && <1.7     , prettyprinter-ansi-terminal ^>= 1.1     , terminal-size ^>= 0.3     , transformers >= 0.4 && < 0.6+  if impl(ghc >= 8.10)+    build-depends:+      , exceptions ^>= 0.10  test-suite test   import: common
src/Control/Carrier/Readline/Haskeline.hs view
@@ -1,4 +1,10 @@-{-# LANGUAGE GeneralizedNewtypeDeriving, LambdaCase, MultiParamTypeClasses, ScopedTypeVariables, TypeApplications #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# OPTIONS_GHC -Wno-redundant-constraints #-} module Control.Carrier.Readline.Haskeline ( -- * Readline carrier   runReadline@@ -12,10 +18,12 @@ import Control.Carrier.Lift import Control.Carrier.Reader import Control.Effect.Readline+#if MIN_VERSION_haskeline(0, 8, 0)+import Control.Monad.Catch (MonadMask(..))+#endif import Control.Monad.Fix (MonadFix) import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Trans.Class (MonadTrans(..))-import Data.Coerce (coerce) import Data.Text.Prettyprint.Doc import Data.Text.Prettyprint.Doc.Render.Terminal import System.Console.Haskeline@@ -25,10 +33,18 @@ import System.FilePath import System.IO (stdout) +#if MIN_VERSION_haskeline(0, 8, 0)+runReadline :: (MonadIO m, MonadMask m) => Prefs -> Settings m -> ReadlineC m a -> m a+#else runReadline :: MonadException m => Prefs -> Settings m -> ReadlineC m a -> m a-runReadline prefs settings (ReadlineC m) = runInputTWithPrefs prefs (coerce settings) (runM (runReader (Line 0) m))+#endif+runReadline prefs settings (ReadlineC m) = runInputTWithPrefs prefs settings (runM (runReader (Line 0) m)) +#if MIN_VERSION_haskeline(0, 8, 0)+runReadlineWithHistory :: (MonadIO m, MonadMask m) => ReadlineC m a -> m a+#else runReadlineWithHistory :: MonadException m => ReadlineC m a -> m a+#endif runReadlineWithHistory block = do   homeDir <- liftIO getHomeDirectory   prefs   <- liftIO $ readPrefs (homeDir </> ".haskeline")@@ -43,24 +59,29 @@    runReadline prefs settings block -newtype ReadlineC m a = ReadlineC { runReadlineC :: ReaderC Line (LiftC (InputT m)) a }+newtype ReadlineC m a = ReadlineC (ReaderC Line (LiftC (InputT m)) a)   deriving (Applicative, Functor, Monad, MonadFix, MonadIO)  instance MonadTrans ReadlineC where   lift = ReadlineC . lift . lift . lift +#if MIN_VERSION_haskeline(0, 8, 0)+instance (MonadIO m, MonadMask m) => Algebra Readline (ReadlineC m) where+#else instance MonadException m => Algebra Readline (ReadlineC m) where-  alg = \case-    Prompt prompt k -> ReadlineC $ do+#endif+  alg _ sig ctx = case sig of+    Prompt prompt -> ReadlineC $ do       str <- sendM (getInputLine @m (cyan <> prompt <> plain))       Line line <- ask-      local increment (runReadlineC (k line str))+      local increment $ pure ((line, str) <$ ctx)       where cyan = "\ESC[1;36m\STX"             plain = "\ESC[0m\STX"-    Print doc k -> do+    Print doc -> do       s <- maybe 80 Size.width <$> liftIO size-      liftIO (renderIO stdout (layoutSmart defaultLayoutOptions { layoutPageWidth = AvailablePerLine s 0.8 } (doc <> line)))-      k+      let docstream = layoutSmart (layoutOptions s) (doc <> line)+      (<$ ctx) <$> (liftIO . renderIO stdout $ docstream)+      where layoutOptions s = defaultLayoutOptions { layoutPageWidth = AvailablePerLine s 0.8 }   newtype Line = Line Int
src/Control/Effect/Readline.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE DeriveFunctor, DeriveGeneric #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE KindSignatures #-} module Control.Effect.Readline ( -- * Readline effect   Readline(..)@@ -11,22 +12,18 @@ ) where  import Control.Algebra+import Data.Kind (Type) import Data.Text.Prettyprint.Doc (Doc) import Data.Text.Prettyprint.Doc.Render.Terminal (AnsiStyle)-import GHC.Generics (Generic1) import Prelude hiding (print)  prompt :: Has Readline sig m => String -> m (Int, Maybe String)-prompt p = send (Prompt p (curry pure))+prompt p = send (Prompt p)  print :: Has Readline sig m => Doc AnsiStyle -> m ()-print s = send (Print s (pure ()))+print s = send (Print s)  -data Readline m k-  = Prompt String (Int -> Maybe String -> m k)-  | Print (Doc AnsiStyle) (m k)-  deriving (Functor, Generic1)--instance HFunctor Readline-instance Effect   Readline+data Readline (m :: Type -> Type) (k :: Type) where+  Prompt :: String -> Readline m (Int, Maybe String)+  Print :: Doc AnsiStyle -> Readline m ()
test/Test.hs view
@@ -2,5 +2,7 @@ ( main ) where +import Control.Carrier.Readline.Haskeline ()+ main :: IO () main = pure ()