packages feed

free-listt (empty) → 0.1.0.0

raw patch · 6 files changed

+264/−0 lines, 6 filesdep +basedep +exceptionsdep +free

Dependencies added: base, exceptions, free, free-listt, mtl, transformers

Files

+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# Revision history for free-listt++## 0.1.0.0 -- YYYY-mm-dd++* First version. Released on an unsuspecting world.
+ LICENSE view
@@ -0,0 +1,20 @@+Copyright (c) 2023 Manuel Bärenz++Permission is hereby granted, free of charge, to any person obtaining+a copy of this software and associated documentation files (the+"Software"), to deal in the Software without restriction, including+without limitation the rights to use, copy, modify, merge, publish,+distribute, sublicense, and/or sell copies of the Software, and to+permit persons to whom the Software is furnished to do so, subject to+the following conditions:++The above copyright notice and this permission notice shall be included+in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ free-listt.cabal view
@@ -0,0 +1,143 @@+cabal-version:      3.0+-- The cabal-version field refers to the version of the .cabal specification,+-- and can be different from the cabal-install (the tool) version and the+-- Cabal (the library) version you are using. As such, the Cabal (the library)+-- version used must be equal or greater than the version stated in this field.+-- Starting from the specification version 2.2, the cabal-version field must be+-- the first thing in the cabal file.++-- Initial package description 'free-listt' generated by+-- 'cabal init'. For further documentation, see:+--   http://haskell.org/cabal/users-guide/+--+-- The name of the package.+name:               free-listt++-- The package version.+-- See the Haskell package versioning policy (PVP) for standards+-- guiding when and how versions should be incremented.+-- https://pvp.haskell.org+-- PVP summary:     +-+------- breaking API changes+--                  | | +----- non-breaking API additions+--                  | | | +--- code changes with no API change+version:            0.1.0.0++-- A short (one-line) description of the package.+synopsis: Lawful list and set monad transformers based on free monads++-- A longer description of the package.+description:+    This package provides a lawful @ListT@ implementation based on free monads.+    It also provides an _Applicative_ list transformer, which is a lawful @Applicative@,+    and isomorphic to the old @ListT@.+++-- The license under which the package is released.+license:            MIT++-- The file containing the license text.+license-file:       LICENSE++-- The package author(s).+author:             Manuel Bärenz++-- An email address to which users can send suggestions, bug reports, and patches.+maintainer:         programming@manuelbaerenz.de++-- A copyright notice.+-- copyright:+category:           Control+build-type:         Simple++-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.+extra-doc-files:    CHANGELOG.md++-- Extra source files to be distributed with the package, such as examples, or a tutorial module.+-- extra-source-files:++tested-with:+  GHC == 8.10.7+  GHC == 9.0.2+  GHC == 9.2.8+  GHC == 9.4.8+  GHC == 9.6.3+  GHC == 9.8.1++source-repository head+  type:     git+  location: https://github.com/turion/free-listt.git++common warnings+    ghc-options: -Wall++library+    -- Import common warning flags.+    import:           warnings++    -- Modules exported by the library.+    exposed-modules:+        Control.Applicative.Trans.List+        Control.Monad.Trans.List++    -- Modules included in this library but not exported.+    other-modules:++    default-extensions:+        ApplicativeDo,+        DeriveFunctor,+        DerivingStrategies,+        DerivingVia,+        ImportQualifiedPost,+        GeneralizedNewtypeDeriving,+        TupleSections++    -- Other library packages from which modules are imported.+    build-depends:    base >=4.14.3.0 && < 4.20+                    , free >=5.1.3 && < 5.3+                    , transformers ^>= 0.6+                    , mtl ^>= 2.3+                    , exceptions ^>= 0.10++    -- Directories containing source files.+    hs-source-dirs:   src++    -- Base language which the package is written in.+    default-language: Haskell2010++    ghc-options:  -W++    if flag(dev)+        ghc-options: -Werror+++test-suite free-listt-test+    -- Import common warning flags.+    import:           warnings++    -- Base language which the package is written in.+    default-language: Haskell2010++    -- Modules included in this executable, other than Main.+    -- other-modules:++    -- LANGUAGE extensions used by modules in this package.+    -- other-extensions:++    -- The interface type and version of the test suite.+    type:             exitcode-stdio-1.0++    -- Directories containing source files.+    hs-source-dirs:   test++    -- The entrypoint to the test suite.+    main-is:          Main.hs++    -- Test dependencies.+    build-depends:+        base,+        free-listt++flag dev+    description: Enable warnings as errors. Active on ci.+    default: False+    manual: True
+ src/Control/Applicative/Trans/List.hs view
@@ -0,0 +1,17 @@+-- | The applicative list transformer+module Control.Applicative.Trans.List where++-- base+import Control.Applicative (Alternative)+import Data.Functor.Compose++{- | The 'Applicative' list transformer.++This is isomorphic to the "old" @ListT@ transformer.+It is not a monad, but a lawful 'Applicative'.+-}+newtype ListT f a = ListT {runListT :: f [a]}+  deriving (Functor)+  deriving+    (Applicative, Alternative)+    via (Compose f [])
+ src/Control/Monad/Trans/List.hs view
@@ -0,0 +1,73 @@+-- | Free list monad transformer+module Control.Monad.Trans.List where++-- base+import Control.Applicative+import Control.Monad+import Control.Monad.IO.Class+import Data.Functor.Classes++-- transformers+import Control.Monad.Trans.Class++-- mtl+import Control.Monad.Error.Class+import Control.Monad.RWS (MonadRWS, MonadReader, MonadState)+import Control.Monad.Writer++-- exceptions+import Control.Monad.Catch (MonadCatch, MonadThrow)++-- free+import Control.Monad.Trans.Free++-- free-listt+import Control.Applicative.Trans.List qualified as Applicative++{- | The free list monad transformer.++It is implemented as a rose tree (see https://en.wikipedia.org/wiki/Rose_tree)+of computations in @m@.+-}+newtype ListT m a = ListT {getListT :: FreeT [] m a}+  deriving+    ( Functor+    , Applicative+    , Monad+    , Alternative+    , MonadPlus+    , MonadIO+    , MonadFail+    , MonadTrans+    , Eq1+    , Ord1+    , Read1+    , Show1+    , Eq+    , Ord+    , Read+    , Show+    , MonadError e+    , MonadState s+    , MonadReader r+    , MonadRWS r w s+    , MonadWriter w+    , MonadCatch+    , MonadThrow+    )++-- | Flatten all layers of computations to a single one.+flatten :: (Monad m) => ListT m a -> Applicative.ListT m a+flatten = Applicative.ListT . runListT++-- | Like 'flatten', but remove the 'Applicative.ListT' wrapper.+runListT :: (Monad m) => ListT m a -> m [a]+runListT = iterT (fmap concat . sequence) . fmap pure . getListT++-- | Construct a 'ListT' from an effectful list (a single layer).+listT :: (Monad m) => m [a] -> ListT m a+listT = ListT . FreeT . fmap (Free . fmap pure)++-- | Construct a 'ListT' from a single effectful value.+singleton :: (Functor m) => m a -> ListT m a+singleton = ListT . FreeT . fmap Pure
+ test/Main.hs view
@@ -0,0 +1,6 @@+module Main (main) where++main :: IO ()+main = putStrLn "Test suite not yet implemented."++-- all laws, including some version of alternative