Quickcheck спецификация DSL

Я хочу создать удобочитаемый DSL, понятный не программисту-хакелу, для создания спецификаций для тестирования "черных ящиков" внешних систем.

И мне интересно, можно ли что-то подобное сделать в Хаскеле.

action = readProcess "sleep 1; print success"

prop_action = monadicIO $
    within 100000 >>=
    repliesWith (== "success")

within :: Int -> IO a -> IO
within t = fromMaybe False $ timeout t

repliesWith :: (a -> Bool) -> IO a -> IO Bool
repliesWith v = liftM v

Здесь я даю псевдокод для проверки того, что действие вернет значение "success" в течение 0,1 секунды. Кажется, мне нужна какая-то монада, которая бы закорачивала ложные значения, чтобы связать несколько проверок, которые передают значения от одного к другому.

Чувствую, что нечто подобное должно существовать. Может быть, вы можете предложить библиотеку или как реализовать мою идею в Haskell.

0 ответов

Другие вопросы по тегам