packages feed

liblawless 0.13.3 → 0.14.0.1

raw patch · 22 files changed

+462/−169 lines, 22 filesdep +boomerangdep +data-defaultdep +dnsdep −pathdep −path-ionew-component:exe:ZFSPVP ok

version bump matches the API change (PVP)

Dependencies added: boomerang, data-default, dns, network, network-ip

Dependencies removed: path, path-io

API changes (from Hackage documentation)

- Aeson: moludeJSONOptions :: Options
- Aeson: moludeParseJSON :: forall a. (GFromJSON (Rep a), Generic a) => Value -> Parser a
- Aeson: moludeToJSONEncoding :: forall a. (GToEncoding (Rep a), Generic a) => a -> Encoding
- Paths: filePath :: Getter (Path b t) FilePath
- Paths: type AbsDir = Path Abs Dir
- Paths: type AbsFile = Path Abs File
- Paths: type RelDir = Path Rel Dir
- Paths: type RelFile = Path Rel File
+ Aeson: lawlessJSONOptions :: Options
+ Aeson: lawlessParseJSON :: forall a. (GFromJSON (Rep a), Generic a) => Value -> Parser a
+ Aeson: lawlessToJSONEncoding :: forall a. (GToEncoding (Rep a), Generic a) => a -> Encoding
+ Boomerang: (∘) :: forall (b :: k) (c :: k) (a :: k) (cat :: k -> k -> *). Category cat => cat b c -> cat a b -> cat a c
+ Boomerang: infix 9 ∘
+ Boomerang: type TextsBoomerang a b = Boomerang TextsError [Text] a b
+ Map: data Map k a :: * -> * -> *
+ Map: singleton :: k -> a -> Map k a
+ Text: nfcText :: (Choice p, Applicative f) => p Text (f Text) -> p NFCText (f NFCText)
+ Text: nfcUtf8 :: (Choice p, Applicative f) => p String (f String) -> p NFCText (f NFCText)
+ Text: nfcUtf8ByteString :: (Choice p, Applicative f) => p ByteString (f ByteString) -> p NFCText (f NFCText)
- Temporary: withTempHandle :: (MonadIO m, MonadMask m) => RelFile -> (Handle -> m a) -> m a
+ Temporary: withTempHandle :: (MonadIO m, MonadMask m) => FilePath -> (Handle -> m a) -> m a

Files

− CHANGELOG
+ ChangeLog view
@@ -0,0 +1,22 @@+2016-12-16  Evan Cofsky  <evan@theunixman.com>++	* Examples/ZFS/zpools.yaml: Rename from zpool.yaml.++	* liblawless.cabal: Uncomment ZFS example build.++	* Source/Yaml.hs: Import and export Generics here, too.++	* Examples/ZFS: Create Types, use optics, add Main.hs.++	* Source/Aeson.hs: Rename molude to lawless.++	* Tests/TestAeson.hs: Rename molude to lawless.++	* liblawless.cabal (0.14.0): Adding Networking library, clearing+	up NFC Text, focusing more on examples and tests.++	* Source/Text.hs: Clearer notion of NFC optics vs regular Lens+	optics.++	* Source/Networking.hs: Created this file to start composing+	various network libraries together.
+ Examples/ZFS/Main.hs view
@@ -0,0 +1,16 @@+{-|+Module:             Main+Description:        Demonstration of Boomerang and Yaml for parsing.+Copyright:          © 2016 All rights reserved.+License:            GPL-3+Maintainer:         Evan Cofsky <>+Stability:          experimental+Portability:        POSIX+-}++module Main where++import Lawless+import Types++main = putStrLn "Hello"
+ Examples/ZFS/Types.hs view
@@ -0,0 +1,19 @@+{-|+Module:             Types+Description:        ZFS and ZPool types+Copyright:          © 2016 All rights reserved.+License:            GPL-3+Maintainer:         Evan Cofsky <>+Stability:          experimental+Portability:        POSIX+-}++module Types (+    module Types.ZPools,+    module Types.ZPool,+    module Types.ZName+    ) where++import Types.ZPools+import Types.ZPool+import Types.ZName
+ Examples/ZFS/Types/ZName.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE TemplateHaskell #-}+{-|+Module:             Types.ZName+Description:        Builder for a ZPool name.+Copyright:          © 2016 All rights reserved.+License:            GPL-3+Maintainer:         Evan Cofsky <>+Stability:          experimental+Portability:        POSIX+-}++module Types.ZName where++import Lawless+import Yaml+import Text++data ZNDateTime = ISO8601 deriving (Show, Eq, Ord, Generic)+makePrisms ''ZNDateTime++instance FromJSON ZNDateTime where+    parseJSON = lawlessParseJSON++instance ToJSON ZNDateTime where+    toEncoding = lawlessToJSONEncoding++data ZNComponent =+    String Text |+    Datetime ZNDateTime+    deriving (Eq, Show, Ord, Generic)+makePrisms ''ZNComponent++instance FromJSON ZNComponent where+    parseJSON = lawlessParseJSON++instance ToJSON ZNComponent where+    toEncoding = lawlessToJSONEncoding++newtype ZNComponents = ZNComponents [ZNComponent]+    deriving (Eq, Show, Ord, Monoid, Generic)+makePrisms ''ZNComponents++instance FromJSON ZNComponents where+    parseJSON = lawlessParseJSON++instance ToJSON ZNComponents where+    toEncoding = lawlessToJSONEncoding++data ZName = ZName {+    _znSeparator ∷ Char,+    _znComponents ∷ ZNComponents+    } deriving (Eq, Show, Ord, Generic)+makePrisms ''ZName++instance FromJSON ZName where+    parseJSON = lawlessParseJSON++instance ToJSON ZName where+    toEncoding = lawlessToJSONEncoding
+ Examples/ZFS/Types/ZPool.hs view
@@ -0,0 +1,27 @@+{-# LANGUAGE TemplateHaskell #-}+{-|+Module:             Types.ZPool+Description:        Description of a single ZPool+Copyright:          © 2016 All rights reserved.+License:            GPL-3+Maintainer:         Evan Cofsky <>+Stability:          experimental+Portability:        POSIX+-}++module Types.ZPool where++import Lawless+import Yaml+import Types.ZName++data ZPool = ZPool {+    _zpName ∷ ZName+    } deriving (Eq, Show, Ord, Generic)+makePrisms ''ZPool++instance FromJSON ZPool where+    parseJSON = lawlessParseJSON++instance ToJSON ZPool where+    toEncoding = lawlessToJSONEncoding
+ Examples/ZFS/Types/ZPools.hs view
@@ -0,0 +1,28 @@+{-|+Module:             Types.ZPools+Description:        Representation of a collection of ZPools+Copyright:          © 2016 All rights reserved.+License:            GPL-3+Maintainer:         Evan Cofsky <>+Stability:          experimental+Portability:        POSIX+-}++{-# LANGUAGE TemplateHaskell #-}++module Types.ZPools where++import Lawless+import Yaml+import Set+import Types.ZPool++newtype ZPools = ZPools (Set ZPool)+    deriving (Eq, Show, Generic, Monoid)+makePrisms ''ZPools++instance FromJSON ZPools where+    parseJSON = lawlessParseJSON++instance ToJSON ZPools where+    toEncoding = lawlessToJSONEncoding
+ Examples/ZFS/zpools.yaml view
@@ -0,0 +1,18 @@+zpools:+  - name:+      separator: _+      components:+        - string: zpool+        - datetime: iso8601+    options:+      - atime: false+      - compression: lz4+      - normalization: formD+      - mountpount: null+      - acltype: posixacl+      - xattr: sa+      - checksum: sha256+      - devices: false+      - setuid: false+      - exec: off+      - redundant_metadata: all
README.md view
@@ -1,6 +1,7 @@-# Molude, a Prelude Replacement+# Lawless, a Prelude Replacement -Welcome to [Molude, a Prelude Replacement][Molude]. It focuses on a few core ideas:+Welcome to [Lawless, a Prelude Replacement][Lawless]. It focuses on a+few core ideas:  - Support for GHC 8 and later - Yaml configuration@@ -9,11 +10,19 @@ - Lenses and default Aeson encodings for generated datastructures. - Easy Generic and Typeable deriving. -It's based on [protolude][protolude], [lenses][lenses], and tries to-extend on them as much as possible.+It's based on [protolude][protolude], [lenses][lenses],+and [machines][machines], and tries to extend on them as much as+possible. -[Molude]: https://gitlab.com/misandrist/libmolude+[Lawless]: https://gitlab.com/misandrist/liblawless  [protolude]: https://github.com/sdiehl/protolude  [lenses]: https://hackage.haskell.org/package/lens++[machines]: https://hackage.haskell.org/package/machines++# Why Lawless?++1. It was started essentially by a rogue spinoff Haskell community+   that rapidly expanded into its own organization.
Source/Aeson.hs view
@@ -2,9 +2,9 @@     module Data.Aeson,     module Data.Aeson.Types,     module Data.JsonSchema.Draft4,-    moludeJSONOptions,-    moludeToJSONEncoding,-    moludeParseJSON+    lawlessJSONOptions,+    lawlessToJSONEncoding,+    lawlessParseJSON     ) where  import Lawless@@ -21,8 +21,8 @@     in         toListOf (droppingWhile p folded) -moludeJSONOptions ∷ Options-moludeJSONOptions = defaultOptions {+lawlessJSONOptions ∷ Options+lawlessJSONOptions = defaultOptions {     fieldLabelModifier = camelTo2 '_' ∘ dropLensPrefix,     constructorTagModifier = camelTo2 '_' ∘ dropLensPrefix,     allNullaryToStringTag = False,@@ -30,8 +30,8 @@     unwrapUnaryRecords = True,     sumEncoding = ObjectWithSingleField} -moludeToJSONEncoding ∷ ∀ a. (GToEncoding (Rep a), Generic a) ⇒ a → Encoding-moludeToJSONEncoding = genericToEncoding moludeJSONOptions+lawlessToJSONEncoding ∷ ∀ a. (GToEncoding (Rep a), Generic a) ⇒ a → Encoding+lawlessToJSONEncoding = genericToEncoding lawlessJSONOptions -moludeParseJSON ∷ ∀ a. (GFromJSON (Rep a), Generic a) ⇒ Value → Parser a-moludeParseJSON = genericParseJSON moludeJSONOptions+lawlessParseJSON ∷ ∀ a. (GFromJSON (Rep a), Generic a) ⇒ Value → Parser a+lawlessParseJSON = genericParseJSON lawlessJSONOptions
+ Source/Boomerang.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE TemplateHaskell #-}+{-# Language TypeOperators, PolyKinds, MultiWayIf #-}++module Boomerang (+    module Text.Boomerang,+    module Text.Boomerang.TH,+    module Text.Boomerang.Texts,+    module Control.Category,+    TextsBoomerang,+    (∘)+    ) where++import Text (Text)+import Text.Boomerang+import Text.Boomerang.TH+import Text.Boomerang.Texts+import Control.Category ((.), id, Category)++type TextsBoomerang a b = Boomerang TextsError [Text] a b++(∘) ∷ ∀ (b ∷ k) (c ∷ k) (a ∷ k) (cat ∷ k → k → *).+    Category cat ⇒ cat b c → cat a b → cat a c+(∘) = (.)+infix 9 ∘
Source/Lawless.hs view
@@ -26,7 +26,7 @@ import Functor import List import Monad-import Control.Lens+import Control.Lens hiding (strict) import Data.Eq (Eq(..)) import Data.Ord (Ord(..)) 
+ Source/Map.hs view
@@ -0,0 +1,10 @@+module Map (+    module Data.Map.Lens,+    module Data.Map.Unicode,+    Map,+    singleton+    ) where++import Data.Map.Lens+import Data.Map.Unicode+import Data.Map (Map, singleton)
+ Source/Networking.hs view
@@ -0,0 +1,14 @@+-- | Network type library++module Networking (+    module Network.IP.Addr,+    module Network.Socket,+    module Network.Socket.ByteString,+    module Network.DNS+    ) where++import Lawless+import Network.IP.Addr+import Network.Socket hiding (send, sendTo, recv, recvFrom)+import Network.Socket.ByteString+import Network.DNS
− Source/Paths.hs
@@ -1,27 +0,0 @@-{-# Language NoMonomorphismRestriction #-}--module Paths-    (-      module Path,-      module Path.IO,-      module System.FilePath,-      AbsDir,-      AbsFile,-      RelDir,-      RelFile,-      filePath-    ) where---import Control.Lens (Getter, to)-import Path-import Path.IO-import System.FilePath hiding ((</>), makeRelative)--type AbsDir = Path Abs Dir-type AbsFile = Path Abs File-type RelDir = Path Rel Dir-type RelFile = Path Rel File--filePath ∷ Getter (Path b t) FilePath-filePath = to (toFilePath)
Source/Temporary.hs view
@@ -12,16 +12,16 @@  import Lawless hiding ((<.>)) import qualified System.IO.Temp as T-import Paths import Control.Monad.IO.Class import System.IO import Control.Monad.Catch+import System.FilePath  -- | Run a function with a temporary file handle named after the -- passed name. Ensures the handle is unbuffered and in binary mode.-withTempHandle ∷ (MonadIO m, MonadMask m) ⇒ RelFile → (Handle → m a) → m a+withTempHandle ∷ (MonadIO m, MonadMask m) ⇒ FilePath → (Handle → m a) → m a withTempHandle name f =-    T.withSystemTempFile (name ^. filePath <> "XXXXXXXXXXXXXXXX")+    T.withSystemTempFile (name <> "XXXXXXXXXXXXXXXX")     $ \_ h →           -- Make sure the handle is strictly binary with no buffering.           liftIO (hSetBuffering h NoBuffering) >>
Source/Text.hs view
@@ -1,10 +1,23 @@+{-# Language NoMonomorphismRestriction #-}+ module Text     (-     module Data.Text.ICU.Normalized.NFC,      module Data.Text,-     module Data.Text.Lens+     module Data.Text.Lens,+     nfcText,+     nfcUtf8ByteString,+     nfcUtf8     ) where -import Data.Text.ICU.Normalized.NFC-import Data.Text (Text)+import qualified Data.Text.ICU.Normalized.NFC as NFC+import Data.Text (Text, null, empty) import Data.Text.Lens++-- | Converts between 'Text' and 'NFCText'+nfcText = NFC.strict++-- | Converts between a UTF-8 ByteString and an NFCText+nfcUtf8ByteString = NFC.utf8ByteString++-- | Converts between a String and an NFCText+nfcUtf8 = NFC.utf8
Source/Yaml.hs view
@@ -2,8 +2,10 @@  module Yaml (     module Data.Yaml,-    module Aeson+    module Aeson,+    module Generics     ) where +import Generics import Data.Yaml import Aeson hiding (decode, encode)
+ TODO.org view
@@ -0,0 +1,10 @@+* What's Next+This file describes the current and proposed changes to liblawless+over the next few release cycles.+* 0.14+** Networking Support+- Adaptors for [[http://hackage.haskell.org/package/network-ip][network-ip]], [[http://hackage.haskell.org/package/dns][DNS]], [[http://hackage.haskell.org/package/network-ip][network]].+** Improved Text Support+- Avoid collisions with [[http://hackage.haskell.org/package/lens-4.15.1/docs/Data-Text-Lens.html][Data.Text.Lens]]+** Boomerang+- Use [[http://hackage.haskell.org/package/boomerang][Boomerang]] as the primary parsing library.
Tests/TestAeson.hs view
@@ -28,9 +28,9 @@     } deriving (Show, Eq, Ord, Generic) makeLenses ''TestData instance ToJSON TestData where-    toEncoding = moludeToJSONEncoding+    toEncoding = lawlessToJSONEncoding instance FromJSON TestData where-    parseJSON = moludeParseJSON+    parseJSON = lawlessParseJSON  instance Arbitrary Text where     arbitrary = pack <$> arbitrary@@ -54,9 +54,9 @@         _clRegion ∷ Text     } deriving (Show, Eq, Ord, Generic) instance ToJSON Cluster where-    toEncoding = moludeToJSONEncoding+    toEncoding = lawlessToJSONEncoding instance FromJSON Cluster where-    parseJSON = moludeParseJSON+    parseJSON = lawlessParseJSON  data Schema1 = Schema1     {@@ -64,9 +64,9 @@         _sc1Cluster ∷ Cluster     } deriving (Show, Eq, Ord, Generic) instance ToJSON Schema1 where-    toEncoding = moludeToJSONEncoding+    toEncoding = lawlessToJSONEncoding instance FromJSON Schema1 where-    parseJSON = moludeParseJSON+    parseJSON = lawlessParseJSON  properties ∷ Test properties = $(testGroupGenerator)
Tests/TestTemporary.hs view
@@ -19,7 +19,6 @@ import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.QuickCheck import Text-import Paths import Temporary import qualified Data.ByteString as B import System.IO hiding (utf8)@@ -31,7 +30,7 @@  prop_CheckBuffering (line ∷ Text) = monadicIO $ do     let l = encodeUtf8 line-    m ← run $ withTempHandle $(mkRelFile "testTemp") $ \h → do+    m ← run $ withTempHandle "testTemp" $ \h → do         B.hPut h l         hSeek h AbsoluteSeek 0         B.hGetContents h
liblawless.cabal view
@@ -1,5 +1,5 @@ name:                liblawless-version:             0.13.3+version:             0.14.0.1 synopsis:            Prelude based on protolude for GHC 8 and beyond. license:             GPL-3 license-file:        LICENSE@@ -9,96 +9,104 @@ category:            Prelude build-type:          Simple extra-source-files:-                   CHANGELOG+                   ChangeLog                    README.md+                   TODO.org                    Tests/*.hs cabal-version:       >=1.24+data-files:+           Examples/ZFS/zpools.yaml description:     A Prelude relpacement for GHC 8 with a focus on building     applications with Lenses, Machines, and Applicatives.  source-repository head   type:     git-  location: https://gitlab.com/misandrist/liblawless.git+  location: git+ssh://lambdanow.us/projects/haskellnow/liblawless.git -source-repository this-  type:     git-  location: https://gitlab.com/misandrist/liblawless.git-  tag: v0.13.3+-- source-repository this+--   type:     git+--   location:   location: git+ssh://lambdanow.us/projects/haskellnow/liblawless.git+--   tag: v0.13.1  library   exposed-modules:-    Aeson-    Exception-    Generics-    Machine-    Parser-    Paths-    Lawless-    Set-    Temporary-    Text-    Textual-    Textual.SepList-    Time-    Tree-    Yaml+                  Aeson+                  Boomerang+                  Exception+                  Generics+                  Lawless+                  Machine+                  Map+                  Networking+                  Parser+                  Set+                  Temporary+                  Text+                  Textual+                  Textual.SepList+                  Time+                  Tree+                  Yaml   default-extensions:-    NoImplicitPrelude-    UnicodeSyntax-    LambdaCase-    ConstraintKinds-    DefaultSignatures-    FlexibleContexts-    FlexibleInstances-    FunctionalDependencies-    GADTs-    DeriveGeneric-    DeriveDataTypeable-    GeneralizedNewtypeDeriving-    KindSignatures-    MultiParamTypeClasses-    OverloadedStrings-    PartialTypeSignatures-    RankNTypes-    ScopedTypeVariables-    StandaloneDeriving-    TypeFamilies-    TypeSynonymInstances+                     NoImplicitPrelude+                     UnicodeSyntax+                     LambdaCase+                     ConstraintKinds+                     DefaultSignatures+                     FlexibleContexts+                     FlexibleInstances+                     FunctionalDependencies+                     GADTs+                     DeriveGeneric+                     DeriveDataTypeable+                     GeneralizedNewtypeDeriving+                     KindSignatures+                     MultiParamTypeClasses+                     OverloadedStrings+                     PartialTypeSignatures+                     RankNTypes+                     ScopedTypeVariables+                     StandaloneDeriving+                     TypeFamilies+                     TypeSynonymInstances   build-depends:-    base >=4.9 && <4.10,-    aeson                      >= 0.11.2 && < 0.12,-    bytestring                 >= 0.10.8 && < 0.11,-    containers                 >= 0.5.7 && < 0.6,-    binary                     >= 0.8.3 && < 0.9,-    text                       >= 1.2.2 && < 1.3,-    transformers               >= 0.5.2 && < 0.6,-    mtl                        >= 2.2.1 && < 2.3,-    time                       >= 1.6.0 && < 1.7,-    base-unicode-symbols       >= 0.2.2 && < 0.3,-    stm                        >= 2.4.4 && < 2.5,-    machines                   >= 0.6.1 && < 0.7,-    contravariant              >= 1.4 && < 1.5,-    semigroups                 >= 0.18.2 && < 0.19,-    exceptions                 >= 0.8.3 && < 0.9,-    containers-unicode-symbols >= 0.3.1 && < 0.4,-    data-textual               >= 0.3.0 && < 0.4,-    parsers                    >= 0.12.4 && < 0.13,-    text-printer               >= 0.4 && < 0.5,-    directory                  >= 1.2.6 && < 1.3,-    filepath                   >= 1.4.1 && < 1.5,-    hjsonschema                >= 1.2.0 && < 1.3,-    random                     >= 1.1 && < 1.2,-    lens                       >= 4.14 && < 4.15,-    path                       >= 0.5.9 && < 0.6,-    path-io                    >= 1.2.0 && < 1.3,-    temporary                  >= 1.2.0 && < 1.3,-    protolude                  >= 0.1.10 && < 0.2,-    stm-containers             >= 0.2.15 && < 0.3,-    text-icu                   >= 0.7.0 && < 0.8,-    text-icu-normalized        >= 0.1.6 && < 0.2,-    yaml                       >= 0.8.20 && < 0.9,-    zippers                    >= 0.2.2 && < 0.3+                aeson                      >= 0.11.2 && < 0.12,+                base >=4.9 && <4.10,+                base-unicode-symbols       >= 0.2.2 && < 0.3,+                binary                     >= 0.8.3 && < 0.9,+                boomerang,+                bytestring                 >= 0.10.8 && < 0.11,+                containers                 >= 0.5.7 && < 0.6,+                containers-unicode-symbols >= 0.3.1 && < 0.4,+                contravariant              >= 1.4 && < 1.5,+                data-default               >= 0.7.1.1 && < 0.8,+                data-textual               >= 0.3.0 && < 0.4,+                directory                  >= 1.2.6 && < 1.3,+                dns                        >= 2.0.10 && < 2.1,+                exceptions                 >= 0.8.3 && < 0.9,+                filepath                   >= 1.4.1 && < 1.5,+                hjsonschema                >= 1.2.0 && < 1.3,+                lens                       >= 4.14 && < 4.15,+                machines                   >= 0.6.1 && < 0.7,+                mtl                        >= 2.2.1 && < 2.3,+                network >= 2.6.3.1,+                network-ip                 >= 0.3 && < 0.4,+                parsers                    >= 0.12.4 && < 0.13,+                protolude                  >= 0.1.10 && < 0.2,+                random                     >= 1.1 && < 1.2,+                semigroups                 >= 0.18.2 && < 0.19,+                stm                        >= 2.4.4 && < 2.5,+                stm-containers             >= 0.2.15 && < 0.3,+                temporary                  >= 1.2.0 && < 1.3,+                text                       >= 1.2.2 && < 1.3,+                text-icu                   >= 0.7.0 && < 0.8,+                text-icu-normalized        >= 0.1.6 && < 0.2,+                text-printer               >= 0.4 && < 0.5,+                time                       >= 1.6.0 && < 1.7,+                transformers               >= 0.5.2 && < 0.6,+                yaml                       >= 0.8.20 && < 0.9,+                zippers                    >= 0.2.2 && < 0.3   hs-source-dirs:      Source   default-language:    Haskell2010 @@ -107,40 +115,82 @@   type: exitcode-stdio-1.0   hs-source-dirs: Tests   main-is: Main.hs+  other-modules:+                TestAeson+                TestSepList+                TestTemporary+                TestTime+                Paths_liblawless   build-depends:-    QuickCheck,-    base >= 4.9 && < 4.10,-    binary >= 0.7.5.0,-    bytestring,-    exceptions >= 0.8.3,-    filepath >= 1.4.0.0,-    liblawless,-    semigroups >= 0.18.2,-    temporary >= 1.2.0.4,-    test-framework,-    test-framework-quickcheck2,-    test-framework-th,-    text,-    time,-    transformers >= 0.4.2.0+                QuickCheck,+                base >= 4.9 && < 4.10,+                binary >= 0.7.5.0,+                dns >= 2.0.10 && < 2.1,+                bytestring,+                exceptions >= 0.8.3,+                filepath >= 1.4.0.0,+                liblawless,+                network >= 2.6.3.1,+                semigroups >= 0.18.2,+                temporary >= 1.2.0.4,+                test-framework,+                test-framework-quickcheck2,+                test-framework-th,+                text,+                time,+                transformers >= 0.4.2.0   default-extensions:-    NoImplicitPrelude-    UnicodeSyntax-    LambdaCase-    ConstraintKinds-    DefaultSignatures-    FlexibleContexts-    FlexibleInstances-    FunctionalDependencies-    GADTs-    DeriveGeneric-    DeriveDataTypeable-    GeneralizedNewtypeDeriving-    KindSignatures-    MultiParamTypeClasses-    OverloadedStrings-    PartialTypeSignatures-    RankNTypes-    ScopedTypeVariables-    TypeFamilies-    TypeSynonymInstances+                     NoImplicitPrelude+                     UnicodeSyntax+                     LambdaCase+                     ConstraintKinds+                     DefaultSignatures+                     FlexibleContexts+                     FlexibleInstances+                     FunctionalDependencies+                     GADTs+                     DeriveGeneric+                     DeriveDataTypeable+                     GeneralizedNewtypeDeriving+                     KindSignatures+                     MultiParamTypeClasses+                     OverloadedStrings+                     PartialTypeSignatures+                     RankNTypes+                     ScopedTypeVariables+                     TypeFamilies+                     TypeSynonymInstances++executable ZFS+  main-is: Main.hs+  other-modules:+                Types+                Types.ZPools+                Types.ZPool+                Types.ZName+  hs-source-dirs:+                 Examples/ZFS+  build-depends:+                 liblawless+  default-language: Haskell2010+  default-extensions:+                     NoImplicitPrelude+                     UnicodeSyntax+                     LambdaCase+                     ConstraintKinds+                     DefaultSignatures+                     FlexibleContexts+                     FlexibleInstances+                     FunctionalDependencies+                     GADTs+                     DeriveGeneric+                     DeriveDataTypeable+                     GeneralizedNewtypeDeriving+                     KindSignatures+                     MultiParamTypeClasses+                     OverloadedStrings+                     PartialTypeSignatures+                     RankNTypes+                     ScopedTypeVariables+                     TypeFamilies+                     TypeSynonymInstances