multivariant-0.1.0.1: src/Test/Multivariant/Types/Description.hs
{-|
Module : Test.Multivariant.Types.Description
Description : Interpreter for description
Copyright : (c) Anton Marchenko, Mansur Ziatdinov, 2016-2017
License : BSD-3
Maintainer : gltronred@gmail.com
Stability : provisional
Portability : POSIX
This module provides interpreter for description.
-}
module Test.Multivariant.Types.Description where
import Test.Multivariant.Classes
import Data.Monoid ((<>))
import Data.Text.Lazy (Text)
import Data.Text.Lazy.Builder
-- | Type for interpreter
newtype Description a b = Description { variants :: [Builder] }
-- | Get a list of texts of variants
getDescription :: Description a b -> [Text]
getDescription = map toLazyText . variants
instance Program Description where
step _f = Description [flush]
a ~> b = Description [da <> db | da <- variants a, db <- variants b ]
a <***> b = Description [da <> db | da <- variants a, db <- variants b ]
a <+++> b = Description (variants a ++ variants b)
instance WithCornerCases Description where
withCornerCases p _ = p
instance WithDescription Description where
withDescription (Description b) t = Description $ map ((fromLazyText t <>) . (singleton '\n' <>)) b