Cabal revisions of Rattus-0.1.0.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-cabal-version: 1.18-name: Rattus-version: 0.1.0.0-category: FRP-synopsis: A modal FRP language-description:-- This library implements the Rattus programming language as- an embedded DSL. To this end the library provides a GHC- plugin that performs the additional checks that are- necessary for Rattus. What follows is a brief- introduction to the language and its usage. A more- detailed introduction can be found in this- <docs/paper.pdf paper>.- - .- - Rattus is a functional reactive programming (FRP) language- that uses modal types to ensure operational properties- that are crucial for reactive programs: productivity (in- each computation step, the program makes progress),- causality (output depends only on current and earlier- input), and no implicit space leaks (programs do not- implicitly retain memory over time).- - .- - To ensure these properties, Rattus uses the type modality- @O@ to express the concept of time at the type- level. Intuitively speaking, a value of type @O a@- represents a computation that will produce a value of type- @a@ in the next time step. Additionally, the language also- features the @Box@ type modality. A value of type @Box a@- is a time-independent computation that can be executed at- any time to produce a value of type @a@.-- .-- The core of the language is defined in the module- "Rattus.Primitives". Note that the operations on @O@ and- @Box@ have non-standard typing rules. Therefore, this- library provides a compiler plugin that checks these- non-standard typing rules. To write Rattus programs, one- must enable this plugin via the GHC option- @-fplugin=Rattus.Plugin@, e.g. by including the following- line in the source file (for better error messages we also- suggest using the option @-g2@):- - .- - > {-# OPTIONS -fplugin=Rattus.Plugin #-}- - .-- In addition, one must mark the functions that are written- in Rattus:-- .- - > {-# ANN myFunction Rattus #-}-- .-- Or mark the whole module as a Rattus module:- - .-- > {-# ANN module Rattus #-}-- .-- Below is a minimal Rattus program using the- "Rattus.Stream" module for programming with streams:-- .-- > {-# OPTIONS -fplugin=Rattus.Plugin #-}- > - > import Rattus- > import Rattus.Stream- > - > {-# ANN sums Rattus #-}- > sums :: Str Int -> Str Int- > sums = scan (box (+)) 0--homepage: https://github.com/pa-ba/Rattus-License: BSD3-License-file: LICENSE-copyright: Copyright (C) 2020 Patrick Bahr-Author: Patrick Bahr-maintainer: Patrick Bahr <paba@itu.dk>-stability: experimental--build-type: Custom--extra-source-files: CHANGELOG.md--extra-doc-files: docs/paper.pdf- -custom-setup- setup-depends:- base >= 4.5 && < 5,- Cabal >= 1.18---library- exposed-modules: Rattus- Rattus.Stream- Rattus.Strict- Rattus.Event- Rattus.Events- Rattus.ToHaskell- Rattus.Yampa- - Rattus.Plugin- Rattus.Arrow- Rattus.Primitives- - other-modules: Rattus.Plugin.ScopeCheck- Rattus.Plugin.Strictify- Rattus.Plugin.Utils- Rattus.Plugin.StableSolver- build-depends: base >=4.12 && <5, containers, simple-affine-space, ghc >= 8.6- hs-source-dirs: src- default-language: Haskell2010- ghc-options: -W -g2- -Test-Suite memory-leak- type: exitcode-stdio-1.0- main-is: MemoryLeak.hs- hs-source-dirs: test- default-language: Haskell2010- build-depends: Rattus, base- ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2--Test-Suite time-leak- type: exitcode-stdio-1.0- main-is: TimeLeak.hs- hs-source-dirs: test- default-language: Haskell2010- build-depends: Rattus, base- ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2- -Test-Suite ill-typed- type: exitcode-stdio-1.0- main-is: test/IllTyped.hs- default-language: Haskell2010- build-depends: Rattus, base- ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2---Test-Suite well-typed- type: exitcode-stdio-1.0- main-is: WellTyped.hs- hs-source-dirs: test- default-language: Haskell2010- build-depends: Rattus, base, containers- ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2-+cabal-version: 1.18 +name: Rattus +version: 0.1.0.0 +x-revision: 1 +category: FRP +synopsis: A modal FRP language +description: + + This library implements the Rattus programming language as + an embedded DSL. To this end the library provides a GHC + plugin that performs the additional checks that are + necessary for Rattus. What follows is a brief + introduction to the language and its usage. A more + detailed introduction can be found in this + <src/docs/paper.pdf paper>. + + . + + Rattus is a functional reactive programming (FRP) language + that uses modal types to ensure operational properties + that are crucial for reactive programs: productivity (in + each computation step, the program makes progress), + causality (output depends only on current and earlier + input), and no implicit space leaks (programs do not + implicitly retain memory over time). + + . + + To ensure these properties, Rattus uses the type modality + @O@ to express the concept of time at the type + level. Intuitively speaking, a value of type @O a@ + represents a computation that will produce a value of type + @a@ in the next time step. Additionally, the language also + features the @Box@ type modality. A value of type @Box a@ + is a time-independent computation that can be executed at + any time to produce a value of type @a@. + + . + + The core of the language is defined in the module + "Rattus.Primitives". Note that the operations on @O@ and + @Box@ have non-standard typing rules. Therefore, this + library provides a compiler plugin that checks these + non-standard typing rules. To write Rattus programs, one + must enable this plugin via the GHC option + @-fplugin=Rattus.Plugin@, e.g. by including the following + line in the source file (for better error messages we also + suggest using the option @-g2@): + + . + + > {-# OPTIONS -fplugin=Rattus.Plugin #-} + + . + + In addition, one must mark the functions that are written + in Rattus: + + . + + > {-# ANN myFunction Rattus #-} + + . + + Or mark the whole module as a Rattus module: + + . + + > {-# ANN module Rattus #-} + + . + + Below is a minimal Rattus program using the + "Rattus.Stream" module for programming with streams: + + . + + > {-# OPTIONS -fplugin=Rattus.Plugin #-} + > + > import Rattus + > import Rattus.Stream + > + > {-# ANN sums Rattus #-} + > sums :: Str Int -> Str Int + > sums = scan (box (+)) 0 + +homepage: https://github.com/pa-ba/Rattus +License: BSD3 +License-file: LICENSE +copyright: Copyright (C) 2020 Patrick Bahr +Author: Patrick Bahr +maintainer: Patrick Bahr <paba@itu.dk> +stability: experimental + +build-type: Custom + +extra-source-files: CHANGELOG.md + +extra-doc-files: docs/paper.pdf + +custom-setup + setup-depends: + base >= 4.5 && < 5, + Cabal >= 1.18 + + +library + exposed-modules: Rattus + Rattus.Stream + Rattus.Strict + Rattus.Event + Rattus.Events + Rattus.ToHaskell + Rattus.Yampa + + Rattus.Plugin + Rattus.Arrow + Rattus.Primitives + + other-modules: Rattus.Plugin.ScopeCheck + Rattus.Plugin.Strictify + Rattus.Plugin.Utils + Rattus.Plugin.StableSolver + build-depends: base >=4.12 && <5, containers, simple-affine-space, ghc >= 8.6 + hs-source-dirs: src + default-language: Haskell2010 + ghc-options: -W -g2 + +Test-Suite memory-leak + type: exitcode-stdio-1.0 + main-is: MemoryLeak.hs + hs-source-dirs: test + default-language: Haskell2010 + build-depends: Rattus, base + ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2 + +Test-Suite time-leak + type: exitcode-stdio-1.0 + main-is: TimeLeak.hs + hs-source-dirs: test + default-language: Haskell2010 + build-depends: Rattus, base + ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2 + +Test-Suite ill-typed + type: exitcode-stdio-1.0 + main-is: test/IllTyped.hs + default-language: Haskell2010 + build-depends: Rattus, base + ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2 + + +Test-Suite well-typed + type: exitcode-stdio-1.0 + main-is: WellTyped.hs + hs-source-dirs: test + default-language: Haskell2010 + build-depends: Rattus, base, containers + ghc-options: -fplugin=Rattus.Plugin -rtsopts -g2 +
revision 2
cabal-version: 1.18 name: Rattus version: 0.1.0.0 -x-revision: 1 +x-revision: 2 category: FRP synopsis: A modal FRP language description: > {-# ANN sums Rattus #-} > sums :: Str Int -> Str Int > sums = scan (box (+)) 0 + + . + + The + <docs/src/Rattus.Stream.html source code of the Rattus.Stream module> + provides more examples on how to program in Rattus. homepage: https://github.com/pa-ba/Rattus License: BSD3
revision 3
cabal-version: 1.18 name: Rattus version: 0.1.0.0 -x-revision: 2 +x-revision: 3 category: FRP synopsis: A modal FRP language description: . + For example, the type of streams is defined as + + . + + > data Str a = a ::: (O (Str a)) + + . + + So the head of the stream is available now, but its tail + is only available in the next time step. Writing a @map@ + function for this type of streams, requires us to use the + @Box@ modality: + + . + + > map :: Box (a -> b) -> Str a -> Str b + > map f (x ::: xs) = unbox f x ::: delay (map f (adv xs)) + + . + + This makes sure that the function @f@ that we give to + @map@ is available at any time in the future. + + . + The core of the language is defined in the module "Rattus.Primitives". Note that the operations on @O@ and @Box@ have non-standard typing rules. Therefore, this . - In addition, one must mark the functions that are written - in Rattus: + In addition, one must annotate the functions that are + written in Rattus: . . - Or mark the whole module as a Rattus module: + Or annotate the whole module as a Rattus module: .