Pinned
Parser in a tweet:
import Control.Monad.State
import Control.Applicative
import Data.List
data T = T [T] deriving Show
ch c = mfilter (== c) $ StateT uncons
parens = T <$ ch '(' <*> many parens <* ch ')'
parse = runStateT
-- $> parse parens "(()())"
-- Just (T [T [],T []],"")

