
On 19 February 2015 at 10:56, Oliver Charles
This is something I think is very important - I often nest applicative syntax in my own code, and it's essential to me that I would be able to nest idiom brackets too.
Indeed, it definitely adds to the handiness to nest them.
My current solution for dealing with sums is to use asum:
asum [[i|TopicalizedSentenceExistential existentialTopic (optional (try sentenceCoord)) ,[i|TopicalizedSentenceUniversal universalTopic sentenceCoord |] ,[i|TopicalizedSentenceComposite compositeSentence|]]
Though it is a little noisy, I think it gives you want you want - machine-predictable indentation and consistency.
As mentioned via IRC, this is tricky due to the unclear semantic differences between x <|> y and asum [x,y] (i.e. the implicit “empty” in asum). asum1 is a solution, but partial functions like that trouble me. Generally I'd prefer to just use asum or asum1, though.
personBirthdayProduct = proc () -> do personRow <- personQuery -< () birthdayRow <- birthdayQuery -< () returnA -< (personRow, birthdayRow)
right now becomes
(,) <$> personQuery <*> birthdayQuery or liftA2 (,) personQuery birthdayQuery
but with idiom brackets becomes
(| (personQuery, birthdayRow) |)
Right, in the case that you don't want to name anything the idiom is much cleaner.