I am reading article about Applicative Abstract Categorial Grammars http://okmij.org/ftp/gengo/applicative-symantics/AACG.pdf and this article uses brackets [[...]] for action on terms inside applicative functors. These brackets are introduced and somehow explained in "Functional Pearl: Applicative programming with effects" http://strictlypositive.org/IdiomLite.pdf. I understand what applicative functor is and what what is functor generally (both in category theory and Haskell) but I still can not understand the meaning and value of these brackets. I understand the sentence idiomatic expression [[f x y]] means ηf * ηx * y, or, alternatively, map (f x) y
- that means that [[F(tau)]]
is sitting inside brackets, but I can not understand the difference between F(tau)
and [[F(tau)]]
in brackets (see page 4 of AACG article about context and notation). Also - brackets are not always used with 3 arguments, sometimes there are even on or none arguments!
Do those brackets have meaning, explanation and use in Haskell world? Any explanation - rigorous or not, associative and free-style of not is really appreciated.
http://learnyouahaskell.com/functors-applicative-functors-and-monoids contains example:
pure (+) <*> Just 3 <*> Just 5
Its fine, but what benefit can we get by applying brackets [[]] around this expression, what additional meaning such application created?