interpretM :: ParserM a -> A.Parser a
interpretM = interpretWithMonad interpretP


data Tree f a = Node a
              | Tree (f (Tree f a))
              deriving (Foldable, Functor)

-- | Pass values with all possible outermost constructors to 'parseJSON',
-- and collect the results.
--
fillOut :: FromJSON a => a -> Tree [] (ParserM a)
fillOut _ = Tree
               [ Node $ parseJSON (Array u)
               , Node $ parseJSON (Object u)