Как я могу использовать многострочный ввод с QuickCheck в doctest?

Из Doctest readme можно использовать doctest с QuickCheck, например:

-- |
-- prop> sort xs == (sort . sort) (xs :: [Int])

Я хотел бы описать это свойство, используя несколько строк, возможно, как

-- |
-- prop> sort xs ==
--            (sort . sort) (xs :: [Int])

Сам Doctest поддерживает многострочный ввод (снова из readme)

-- |
-- >>> :{
--  let
--    x = 1
--    y = 2
--  in x + y + multiline
-- :}
-- 6

и я попробовал несколько похожих синтаксисов, с которыми я столкнулся, например

-- |
-- prop> :{ sort xs ==
--           (sort . sort) (xs :: [Int])
-- }:

без каких-либо успехов. (В приведенном выше примере сообщение об ошибке parse error on input '{'.)

Как я могу использовать многострочный ввод с Quickcheck в doctest?

Ответ 1

По состоянию на сентябрь 2017 года doctest не разрешает многострочные свойства. Тем не менее, вы можете использовать quickCheck, как обычно, в доктрине:

-- >>> import Test.QuickCheck
-- >>> import Data.List (sort)
-- >>> :{
--  quickCheck $ \xs -> 
--      sort xs ==
--            (sort . sort) (xs :: [Int])
-- :}
-- +++ OK, passed 100 tests.

Это подробный, но позволит вам написать произвольные длительные проверки. Обратите внимание: вы всегда можете создать функцию prop_* и использовать ее в своем учении.