test :: (fs :< fs) => Syntactic fs -> String -> [String] -> [String] -> SpecWith ()
test fs des input output =
  describe des (sequence_ ts)
  where
    ts = zipWith3 (\i r o -> it i $ r `shouldBe` o) input result output
    result = map (runP' fs) input
test :: (fs :< fs) => Syntactic fs -> String -> [String] -> [String] -> SpecWith ()
test fs des input output =
  describe des (sequence_ ts)
  where
    ts = zipWith3 (\i r o -> it i $ r `shouldBe` o) input result output
    result = map (runP' fs) input
test fs des input output =
  describe des (sequence_ ts)
  where
    ts = zipWith3 (\i r o -> it i $ r `shouldBe` o) input result output
    result = map (runP' fs) input