packages feed

rhine-gloss 1.2 → 1.3

raw patch · 5 files changed

+64/−48 lines, 5 filesdep +automatondep −dunaidep ~basedep ~rhine

Dependencies added: automaton

Dependencies removed: dunai

Dependency ranges changed: base, rhine

Files

ChangeLog.md view
@@ -1,5 +1,11 @@ # Revision history for rhine-gloss +## 1.3++* Dropped `dunai` dependency in favour of state automata.+  See [the versions readme](./versions.md) for details.+* Support GHC 9.6 and 9.8+ ## 1.1  * dunai-0.11 compatibility
Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-}  -- | Example application for the @gloss@ wrapper.
rhine-gloss.cabal view
@@ -1,33 +1,32 @@ -- Initial rhine-gloss.cabal generated by cabal init.  For further -- documentation, see http://haskell.org/cabal/users-guide/--name:                rhine-gloss-version:             1.2-synopsis:            Gloss backend for Rhine+name: rhine-gloss+version: 1.3+synopsis: Gloss backend for Rhine description:   This package provides a simple wrapper for the `gloss` library,   or rather the function `Graphics.Gloss.play`,   enabling you to write `gloss` applications as signal functions.-license:             BSD3-license-file:        LICENSE-author:              Manuel Bärenz-maintainer:          programming@manuelbaerenz.de++license: BSD3+license-file: LICENSE+author: Manuel Bärenz+maintainer: programming@manuelbaerenz.de -- copyright:-category:            FRP-build-type:          Simple-extra-source-files:  ChangeLog.md-extra-doc-files:     README.md-cabal-version:       2.0+category: FRP+build-type: Simple+extra-source-files: ChangeLog.md+extra-doc-files: README.md+cabal-version: 2.0  source-repository head-  type:     git+  type: git   location: https://github.com/turion/rhine.git  source-repository this-  type:     git+  type: git   location: https://github.com/turion/rhine.git-  tag:      v1.1-+  tag: v1.3  library   exposed-modules:@@ -36,28 +35,39 @@     FRP.Rhine.Gloss.IO     FRP.Rhine.Gloss.Pure     FRP.Rhine.Gloss.Pure.Combined-  build-depends:       base         >= 4.14 && < 4.18-                     , transformers >= 0.5-                     , rhine        == 1.2-                     , dunai        ^>= 0.11-                     , gloss        >= 1.12-                     , mmorph       >= 1.1-                     , monad-schedule >= 0.1-  hs-source-dirs:      src-  default-language:    Haskell2010-  default-extensions:-      TypeOperators-  ghc-options:         -W++  build-depends:+    automaton,+    base >=4.14 && <4.20,+    gloss >=1.12,+    mmorph >=1.1,+    monad-schedule >=0.1,+    rhine ==1.3,+    transformers >=0.5++  hs-source-dirs: src+  default-language: Haskell2010+  default-extensions: TypeOperators+  ghc-options: -W+   if flag(dev)     ghc-options: -Werror  executable rhine-gloss-gears-  main-is:             Main.hs-  ghc-options:         -threaded-  build-depends:       base         >= 4.14 && < 4.18-                     , rhine-gloss-  default-language:    Haskell2010-  ghc-options:         -W -threaded -rtsopts -with-rtsopts=-N+  main-is: Main.hs+  ghc-options: -threaded+  build-depends:+    base >=4.14 && <4.20,+    rhine-gloss++  default-language: Haskell2010+  default-extensions: TypeOperators+  ghc-options:+    -W+    -threaded+    -rtsopts+    -with-rtsopts=-N+   if flag(dev)     ghc-options: -Werror 
src/FRP/Rhine/Gloss.hs view
@@ -17,7 +17,6 @@ import FRP.Rhine as X  -- rhine-gloss- import FRP.Rhine.Gloss.Common as X import FRP.Rhine.Gloss.IO as X import FRP.Rhine.Gloss.Pure as X
src/FRP/Rhine/Gloss/Pure.hs view
@@ -30,16 +30,16 @@ import Control.Monad.Trans.Reader import Control.Monad.Trans.Writer.Strict --- dunai-import Control.Monad.Trans.MSF (performOnFirstSample)-import qualified Control.Monad.Trans.MSF.Reader as MSFReader-import qualified Control.Monad.Trans.MSF.Writer as MSFWriter-import Data.MonadicStreamFunction.InternalCore- -- monad-schedule import Control.Monad.Schedule.Class import Control.Monad.Schedule.Yield +-- automaton+import Data.Automaton.Trans.Except (performOnFirstSample)+import qualified Data.Automaton.Trans.Reader as AutomatonReader+import qualified Data.Automaton.Trans.Writer as AutomatonWriter+import Data.Stream.Result (Result (..))+ -- rhine import FRP.Rhine @@ -114,7 +114,7 @@   IO () flowGlossClSF settings clsf = flowGloss settings $ clsf >-> arrMCl paintAll @@ GlossClock -type WorldMSF = MSF Identity ((Float, Maybe Event), ()) (Picture, Maybe ())+type WorldAutomaton = Automaton Identity ((Float, Maybe Event), ()) (Picture, Maybe ())  -- | The main function that will start the @gloss@ backend and run the 'Rhine' flowGloss ::@@ -123,12 +123,12 @@   Rhine GlossM cl () () ->   IO () flowGloss GlossSettings {..} rhine =-  play display backgroundColor stepsPerSecond (worldMSF, Blank) getPic handleEvent simStep+  play display backgroundColor stepsPerSecond (worldAutomaton, Blank) getPic handleEvent simStep   where-    worldMSF :: WorldMSF-    worldMSF = MSFWriter.runWriterS $ MSFReader.runReaderS $ morphS (runYieldT . unGlossM) $ performOnFirstSample $ eraseClock rhine-    stepWith :: (Float, Maybe Event) -> (WorldMSF, Picture) -> (WorldMSF, Picture)-    stepWith (diff, eventMaybe) (msf, _) = let ((picture, _), msf') = runIdentity $ unMSF msf ((diff, eventMaybe), ()) in (msf', picture)+    worldAutomaton :: WorldAutomaton+    worldAutomaton = AutomatonWriter.runWriterS $ AutomatonReader.runReaderS $ hoistS (runYieldT . unGlossM) $ performOnFirstSample $ eraseClock rhine+    stepWith :: (Float, Maybe Event) -> (WorldAutomaton, Picture) -> (WorldAutomaton, Picture)+    stepWith (diff, eventMaybe) (automaton, _) = let Result automaton' (picture, _) = runIdentity $ stepAutomaton automaton ((diff, eventMaybe), ()) in (automaton', picture)     getPic (_, pic) = pic     handleEvent event = stepWith (0, Just event)     simStep diff = stepWith (diff, Nothing)