diff --git a/yampa-test/CHANGELOG b/yampa-test/CHANGELOG index 42bac024..70ea900d 100644 --- a/yampa-test/CHANGELOG +++ b/yampa-test/CHANGELOG @@ -1,3 +1,6 @@ +2023-12-07 Ivan Perez + * Version bump (0.14.6) (#282). + 2023-10-07 Ivan Perez * Version bump (0.14.5) (#278). * Move test for consistency with module tested (#267). diff --git a/yampa-test/yampa-test.cabal b/yampa-test/yampa-test.cabal index 25ed37a4..5678a2e3 100644 --- a/yampa-test/yampa-test.cabal +++ b/yampa-test/yampa-test.cabal @@ -31,7 +31,7 @@ cabal-version: >= 1.10 build-type: Simple name: yampa-test -version: 0.14.5 +version: 0.14.6 author: Ivan Perez maintainer: ivan.perez@keera.co.uk homepage: http://github.com/ivanperez-keera/Yampa @@ -84,7 +84,7 @@ library base >= 4 && < 5 , normaldistribution >= 1.1.0.1 && < 1.2 , QuickCheck >= 2.12 && < 2.15 - , Yampa >= 0.14.5 && < 0.15 + , Yampa >= 0.14.6 && < 0.15 default-language: Haskell2010 diff --git a/yampa/CHANGELOG b/yampa/CHANGELOG index fe7a8d0b..bdfb0030 100644 --- a/yampa/CHANGELOG +++ b/yampa/CHANGELOG @@ -1,3 +1,10 @@ +2023-12-07 Ivan Perez + * Version bump (0.14.6) (#282). + * Document HTML + WebAssembly backend in README (#34). + * Relax version bounds on deepseq (#280). + * Update and improve documentation of Diagrams example (#281). + * Thanks to @AntanasKal. + 2023-10-07 Ivan Perez * Version bump (0.14.5) (#278). * Define Yampa.FRP.Task.return in terms of pure (#276). diff --git a/yampa/README.md b/yampa/README.md index fc17639d..4c6b4dda 100644 --- a/yampa/README.md +++ b/yampa/README.md @@ -311,6 +311,7 @@ want. Existing backends include: * WX (see wxHaskell) * HTML Canvas via JS Dom (for an example, see [haskanoid's GHCJS branch](https://github.com/ivanperez-keera/haskanoid/blob/ghcjs/src/Display.hs)) * HTML5 Canvas via blank-canvas (see [yampa-canvas](https://github.com/ku-fpg/yampa-canvas)) +* HTML5 with Web Assembly (Wasm) (for an example, see [yampa-wasm-example](https://github.com/AntanasKal/yampa-wasm-example)) * Gloss (see [yampa-gloss](https://github.com/ivanperez-keera/yampa-gloss)) * Diagrams (see [diagrams example](https://github.com/ivanperez-keera/Yampa/blob/develop/yampa/examples/Diagrams.hs)) * [Keera Hails](https://github.com/keera-studios/keera-hails/tree/master/keera-hails-reactive-yampa) (reactive programming framework with GTK, WX, Qt, Android, iOS and HTML support). diff --git a/yampa/Yampa.cabal b/yampa/Yampa.cabal index 92d4f860..e1778e10 100644 --- a/yampa/Yampa.cabal +++ b/yampa/Yampa.cabal @@ -30,7 +30,7 @@ cabal-version: >= 1.10 build-type: Simple name: Yampa -version: 0.14.5 +version: 0.14.6 author: Henrik Nilsson, Antony Courtney maintainer: Ivan Perez (ivan.perez@keera.co.uk) homepage: https://github.com/ivanperez-keera/Yampa/ @@ -100,7 +100,7 @@ library build-depends: base < 6 - , deepseq >= 1.3.0.1 && < 1.5 + , deepseq >= 1.3.0.1 && < 1.6 , random >= 1.1 && < 1.3 , simple-affine-space >= 0.1 && < 0.3 diff --git a/yampa/examples/Diagrams.hs b/yampa/examples/Diagrams.hs index 76b4a28c..f46b0cf6 100644 --- a/yampa/examples/Diagrams.hs +++ b/yampa/examples/Diagrams.hs @@ -13,26 +13,29 @@ -- -- Install diagrams with Cairo support, together with Yampa: -- --- cabal sandbox init --- cabal install Yampa diagrams -fcairo +-- cabal v1-sandbox init +-- cabal v1-install Yampa diagrams diagrams-cairo -- -- Compile in a sandbox with: -- --- cabal exec -- ghc --make examples/Diagrams.hs +-- cabal v1-exec -- ghc --make examples/Diagrams.hs -- -- And run with: -- -- ./examples/Diagrams -w 400 -h 400 -o output.gif import Diagrams.Backend.Cairo.CmdLine -import Diagrams.Prelude +import Diagrams.Prelude hiding (Time) import FRP.Yampa hiding (norm, ( # ), (*^)) +main :: IO () main = mainWith $ take 60 frames +-- | Frames of the animation. frames :: [(Diagram B, Int)] frames = zip ((embed sfVF $ deltaEncode 1 $ repeat ())) (repeat 1) +-- | Signal producing the diagram at a point in time. sfVF :: SF () (Diagram B) sfVF = proc () -> do t <- time -< () @@ -40,16 +43,24 @@ sfVF = proc () -> do <> ( square 3.5 # lw none # alignBL)) returnA -< diag +-- | Field of arrows as it changes over time. +field :: Time -> Diagram B field t = position $ zip points (arrows t) -locs = [(x, y) | x <- [0.1, 0.3 .. 3.25], y <- [0.1, 0.3 .. 3.25]] - +-- | Arrow points as they change over time. +points :: [Point V2 Double] points = map p2 locs -vectorField t (x, y) = r2 (sin (t + y + 1), sin (t + x + 1)) +-- | Arrow locations as they change over time. +locs :: [(Double, Double)] +locs = [(x, y) | x <- [0.1, 0.3 .. 3.25], y <- [0.1, 0.3 .. 3.25]] +-- | Arrows as they change over time. +arrows :: Time -> [Diagram B] arrows t = map (arrowAtPoint t) locs +-- | Diagram of a star at a given point in time and space. +arrowAtPoint :: Time -> (Double, Double) -> Diagram B arrowAtPoint t (x, y) = arrowAt' opts (p2 (x, y)) (sL *^ vf) # alignTL where vf = vectorField t (x, y) @@ -64,3 +75,7 @@ arrowAtPoint t (x, y) = arrowAt' opts (p2 (x, y)) (sL *^ vf) # alignTL opts = (with & arrowHead .~ spike & headLength .~ normalized hs & shaftStyle %~ lwN sW) + +-- | Direction vector depending on the time and the position in space. +vectorField :: Time -> (Double, Double) -> V2 Double +vectorField t (x, y) = r2 (sin (t + y + 1), sin (t + x + 1))