keera-hails-reactive-wx 0.0.3.3 → 0.5.0
raw patch · 7 files changed
+221/−59 lines, 7 filesdep +directorydep +filepathdep +hlintdep ~basenew-uploader
Dependencies added: directory, filepath, hlint, process, regex-posix
Dependency ranges changed: base
Files
- LICENSE +5/−4
- examples/Calc.hs +3/−3
- examples/Minimal.hs +2/−2
- keera-hails-reactive-wx.cabal +92/−50
- src/Graphics/UI/WX/Reactive.hs +5/−0
- tests/HLintMain.hs +23/−0
- tests/HaddockCoverage.hs +91/−0
LICENSE view
@@ -1,4 +1,5 @@-Copyright (c)2012, Ivan Perez+Copyright (c) 2013-2020, Keera Studios Ltd+Copyright (c) 2010-2012, Ivan Perez All rights reserved. @@ -13,9 +14,9 @@ disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Ivan Perez nor the names of other- contributors may be used to endorse or promote products derived- from this software without specific prior written permission.+ * Neither the name of Ivan Perez, nor the name of Keera Studios, nor the+ names of other contributors may be used to endorse or promote products+ derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
examples/Calc.hs view
@@ -10,17 +10,17 @@ import Graphics.UI.WX.Reactive main :: IO ()-main = start $ do +main = start $ do -- View f <- frameLoadRes "test.xrc" "frame_1" [] -- Entry text txtT <- entryText =<< textCtrlRes f "text_ctrl_1" [] nBtns <- mapM (\x -> buttonRes f ("btn" ++ show x) [] >>= buttonClick) [0..9]- btnDot <- buttonClick =<< buttonRes f "btnDot" [] + btnDot <- buttonClick =<< buttonRes f "btnDot" [] -- Controller- + -- Numbers let addX :: String -> ReactiveFieldWrite IO () addX x = modRW (\s _ -> s ++ x) txtT
examples/Minimal.hs view
@@ -10,7 +10,7 @@ import Graphics.UI.WX.Reactive main :: IO ()-main = start $ do +main = start $ do -- View f <- frame [text := "Hello!"] btn <- button f [text := "Quit"]@@ -25,4 +25,4 @@ -- Controller (involution reverse <$$> txt1T) =:= txt2T- btnC =:> modRW (\x -> x ++ "a") txt2T+ btnC =:> modRW (\s _ -> s ++ "a") txt2T
keera-hails-reactive-wx.cabal view
@@ -1,65 +1,107 @@--- hails.cabal auto-generated by cabal init. For additional options,--- see--- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.--- The name of the package.-Name: keera-hails-reactive-wx+-- Copyright : (C) Keera Studios Ltd, 2013+-- License : All Rights Reserved+-- Maintainer : support@keera.co.uk+--+cabal-version: >= 1.10+build-type: Simple --- The package version. See the Haskell package versioning policy--- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for--- standards guiding when and how versions should be incremented.-Version: 0.0.3.3+name: keera-hails-reactive-wx+version: 0.5.0+author: Ivan Perez+maintainer: support@keera.co.uk+homepage: http://www.keera.co.uk/blog/community/+license: BSD3+license-file: LICENSE+category: Development+synopsis: Haskell on Rails - Reactive Fields for WX widgets+description:+ This package contains (incomplete) bindings to WX widget properties, turning+ them into Reactive Values that can be combined with and connected to others+ with Reactive Rules. --- A short (one-line) description of the package.-Synopsis: Haskell on Rails - Reactive Fields for WX widgets+extra-source-files:+ examples/*.hs+ examples/*.wxg+ examples/*.xrc --- A longer description of the package.-Description: This package contains (incomplete) bindings to WX widget properties,- turning them into Reactive Values that can be combined with and- connected to others with Reactive Rules.+source-repository head+ type: git+ location: git://github.com/keera-studios/keera-hails+ subdir: keera-hails-reactive-wx --- URL for the project homepage or repository.-Homepage: http://www.keera.es/blog/community/+-- You can disable the hlint test suite with -f-test-hlint+flag test-hlint+ default: False+ manual: True --- The license under which the package is released.-License: BSD3+-- You can disable the haddock coverage test suite with -f-test-doc-coverage+flag test-doc-coverage+ default: False+ manual: True --- The file containing the license text.-License-file: LICENSE+library --- The package author(s).-Author: Ivan Perez+ exposed-modules:+ Graphics.UI.WX.Reactive --- An email address to which users can send suggestions, bug reports,--- and patches.-Maintainer: ivan.perez@keera.es+ build-depends:+ base >= 4 && < 5+ , wxcore+ , wx+ , keera-hails-reactivevalues --- A copyright notice.--- Copyright: + default-language: Haskell2010 -Category: Development+ hs-source-dirs: src/ -Build-type: Simple+ ghc-options: -Wall -fno-warn-unused-do-bind --- Extra files to be distributed with the package, such as examples or--- a README.-Extra-source-files: - examples/*.hs- examples/*.wxg- examples/*.xrc+test-suite hlint --- Constraint on the version of Cabal needed to build this package.-Cabal-version: >=1.6+ type:+ exitcode-stdio-1.0 -Library- hs-source-dirs: src/- - ghc-options: -Wall -fno-warn-unused-do-bind+ main-is:+ HLintMain.hs - -- Modules exported by the library.- Exposed-modules: Graphics.UI.WX.Reactive- - -- Packages needed in order to build this package.- Build-depends: base >= 4 && < 5- , wxcore- , wx- , keera-hails-reactivevalues+ hs-source-dirs:+ tests++ if !flag(test-hlint)+ buildable: False+ else+ build-depends:+ base+ , hlint >= 1.7++ default-language:+ Haskell2010+++-- Verify that the code is thoroughly documented+test-suite haddock-coverage++ type:+ exitcode-stdio-1.0++ main-is:+ HaddockCoverage.hs++ ghc-options:+ -Wall++ hs-source-dirs:+ tests++ if !flag(test-doc-coverage)+ buildable: False+ else+ build-depends:+ base >= 4 && < 5+ , directory+ , filepath+ , process+ , regex-posix++ default-language:+ Haskell2010
src/Graphics/UI/WX/Reactive.hs view
@@ -1,3 +1,8 @@+-- |+--+-- Copyright : (C) Keera Studios Ltd, 2013+-- License : BSD3+-- Maintainer : support@keera.co.uk module Graphics.UI.WX.Reactive where import Control.Concurrent
+ tests/HLintMain.hs view
@@ -0,0 +1,23 @@+-----------------------------------------------------------------------------+-- |+-- Module : Main (hlint)+-- Copyright : (C) 2013 Edward Kmett+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : provisional+-- Portability : portable+--+-- This module runs HLint on the lens source tree.+-----------------------------------------------------------------------------+module Main where++import Control.Monad+import Language.Haskell.HLint+import System.Environment+import System.Exit++main :: IO ()+main = do+ args <- getArgs+ hints <- hlint $ ["src", "--cross", "--hint=tests/HLint.hs" ] ++ args+ unless (null hints) exitFailure
+ tests/HaddockCoverage.hs view
@@ -0,0 +1,91 @@+-----------------------------------------------------------------------------+-- |+-- Module : Main (HaddockCoverage)+-- Copyright : (C) 2015 Ivan Perez+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Ivan Perez <ivan.perez@keera.co.uk>+-- Stability : provisional+-- Portability : portable+--+-- Copyright notice: This file borrows code+-- https://hackage.haskell.org/package/lens-4.7/src/tests/doctests.hsc+-- which is itself licensed BSD-style as well.+--+-- Run haddock on a source tree and report if anything in any+-- module is not documented.+-----------------------------------------------------------------------------+module Main where++import Control.Applicative+import Control.Monad+import Data.List+import System.Directory+import System.Exit+import System.FilePath+import System.IO+import System.Process+import Text.Regex.Posix++main :: IO ()+main = do+ -- Find haskell modules+ -- TODO: Ideally cabal should do this (provide us with the+ -- list of modules). An alternative would be to use cabal haddock+ -- but that would need a --no-html argument or something like that.+ -- Alternatively, we could use cabal haddock with additional arguments.+ --+ -- See:+ -- https://github.com/keera-studios/haddock/commit/d5d752943c4e5c6c9ffcdde4dc136fcee967c495+ -- https://github.com/haskell/haddock/issues/309#issuecomment-150811929+ files <- getSources++ let haddockArgs = [ "--no-warnings", "--ignore-all-exports" ] ++ files+ let cabalArgs = [ "exec", "--", "haddock" ] ++ haddockArgs+ (code, out, _err) <- readProcessWithExitCode "cabal" cabalArgs ""++ -- Filter out coverage lines, and find those that denote undocumented+ -- modules.+ --+ -- TODO: is there a way to annotate a function as self-documenting,+ -- in the same way we do with ANN for hlint?+ let isIncompleteModule :: String -> Bool+ isIncompleteModule line = isCoverageLine line && not (line =~ "^ *100%")+ where isCoverageLine :: String -> Bool+ isCoverageLine line = line =~ "^ *[0-9]+%"++ let incompleteModules :: [String]+ incompleteModules = filter isIncompleteModule $ lines out++ -- Based on the result of haddock, report errors and exit.+ -- Note that, unline haddock, this script does not+ -- output anything to stdout. It uses stderr instead+ -- (as it should).+ case (code, incompleteModules) of+ (ExitSuccess , []) -> return ()+ -- (ExitFailure _, _) -> exitFailure+ (_ , _) -> do+ hPutStrLn stderr "The following modules are not fully documented:"+ mapM_ (hPutStrLn stderr) incompleteModules+ exitFailure++getSources :: IO [FilePath]+getSources = filter isHaskellFile <$> go "src"+ where+ go dir = do+ (dirs, files) <- getFilesAndDirectories dir+ (files ++) . concat <$> mapM go dirs++ isHaskellFile fp = (isSuffixOf ".hs" fp || isSuffixOf ".lhs" fp)+ && not (any (`isSuffixOf` fp) excludedFiles)++ excludedFiles = [ ]++getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])+getFilesAndDirectories dir = do+ c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir+ (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c++-- find-based implementation (not portable)+--+-- getSources :: IO [FilePath]+-- getSources = fmap lines $ readProcess "find" ["src/", "-iname", "*hs"] ""