packages feed

liblawless-0.17.0: Source/Arbitrary.hs

{-# OPTIONS_GHC -Wno-orphans#-}

{-|
Module:             Arbitrary
Description:        Provides Arbitrary instances of several types in this and other libraries.
Copyright:          © 2016 All rights reserved.
License:            GPL-3
Maintainer:         Evan Cofsky <>
Stability:          experimental
Portability:        POSIX
-}

module Arbitrary where

import Lawless
import Test.QuickCheck (Arbitrary(..), listOf1, suchThat)
import Text
import Time
import Textual.SepList
import Data.Time
import Data.Time.Clock()
import Data.Time.Calendar()
import Data.Text (Text)

instance Arbitrary (SepList Char) where
    arbitrary =
        foldl1Of folded (<>) ∘  over traversed sepList <$> listOf1 arbitrary

instance Arbitrary Text where
    arbitrary = view packed <$> listOf1 arbitrary

instance Arbitrary Day where
    arbitrary = toEnum <$> arbitrary

instance Arbitrary DiffTime where
    arbitrary =
        fromRational <$> suchThat arbitrary (\t → t ≥ 0.0 ∧ t ≤ 86401.0)

instance Arbitrary UTCTime where
    arbitrary =
        UTCTime <$> arbitrary <*> arbitrary

instance Arbitrary Time where
    arbitrary = review _Time <$> arbitrary