stringbuilder 0.1.0 → 0.2.0
raw patch · 3 files changed
+14/−16 lines, 3 filesdep +QuickCheckdep +hspecdep −hspec-shouldbe
Dependencies added: QuickCheck, hspec
Dependencies removed: hspec-shouldbe
Files
- src/Data/String/Builder.hs +4/−8
- stringbuilder.cabal +3/−2
- test/Spec.hs +7/−6
src/Data/String/Builder.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, GADTs #-} -- | -- `build` can be used to construct multi-line string literals in a monadic -- way.@@ -14,15 +14,11 @@ -- > "baz" -- -- `return` and `>>=` are not useful in this context!-module Data.String.Builder (build, Builder) where+module Data.String.Builder (build, Builder, BuilderM) where -import Prelude hiding (undefined) import Data.String import Control.Monad.Trans.Writer -undefined :: a-undefined = error "Data.String.Builder.undefined"- newtype BuilderM a = BuilderM { runBuilderM :: Writer String a } deriving Monad @@ -31,8 +27,8 @@ literal :: String -> Builder literal = BuilderM . tell -instance IsString (BuilderM a) where- fromString s = literal s >> literal "\n" >> return undefined+instance (a ~ ()) => IsString (BuilderM a) where+ fromString s = literal s >> literal "\n" >> return () build :: Builder -> String build = snd . runWriter . runBuilderM
stringbuilder.cabal view
@@ -1,5 +1,5 @@ name: stringbuilder-version: 0.1.0+version: 0.2.0 synopsis: A monadic builder for multi-line string literals description: <https://github.com/sol/stringbuilder#readme> category: Testing@@ -38,4 +38,5 @@ build-depends: base , transformers- , hspec-shouldbe+ , hspec >= 1.3+ , QuickCheck
test/Spec.hs view
@@ -1,16 +1,16 @@ {-# LANGUAGE OverloadedStrings #-}-{-# OPTIONS_GHC -fno-warn-unused-do-bind #-} module Main (main, spec) where -import Test.Hspec.ShouldBe+import Test.Hspec+import Test.QuickCheck import Data.String import Data.String.Builder main :: IO ()-main = hspecX spec+main = hspec spec -spec :: Specs+spec :: Spec spec = do describe "build" $ do it "can be used to construct multi-line string literals in a monadic way" $ do@@ -20,5 +20,6 @@ "baz" `shouldBe` "foo\nbar\nbaz\n" - prop "works for arbitrary input" $ do- \l -> (build . sequence_ . map fromString) l == unlines l+ it "works for arbitrary input" $ do+ property $+ \l -> (build . sequence_ . map fromString) l == unlines l