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.