
Malcolm Wallace wrote:
Conor McBride
writes: P x y z = C x (y, [z])
Isn't this idea very similar to views, and pattern-guards?
Clearly related, but rather cheaper. I don't want to make remarks, positive or negative about either of those proposals at this juncture. I see pattern synonyms, like type synonyms, as a convenient abbreviation mechanism in a part of the language where verbosity is currently compulsory.
For instance, you could rewrite your example thus:
data EffectView x = Bang | Bing x | Dull x
view :: MyEffect x -> EffectView x view (Comp Nothing) = Bang view (Comp (Just (Prod (Any True), Id x))) = Bing x view (Comp (Just (Prod (Any False), Id x))) = Dull x
my_function e | Bang <- view effect = ... | Bing x <- view effect = ... x ... | Dull x <- view effect = ... x ...
You forgot to define the term behaviour also. Pattern synonyms may be used to construct as well as to match values. Of course, I could also write weiv :: EffectView x -> MyEffect x weiv Bang = ... weiv (Bing x) = ... weiv (Dull x) = ... or I could just add them as definitions with lower-case initials. The pattern synonym gives me both at once, and their relationship. Moreover, I don't have to either (a) cover the entire type with pattern synonyms or (b) write a partial view; I just abbreviate whenever I find it convenient. More moreover, your way, the need to interpolate the view encoder forces me to do my matching in a guard, rather than an argument pattern, hence the need to say 'view effect' three times, or however many it happens to be, and some irritation in mixing matching on MyEffect x with matching on other arguments. But perhaps constructing explicit embedding-projection pairs is a better solution than an abbreviation mechanism, for most people's needs. All the best Conor This message has been checked for viruses but the contents of an attachment may still contain software viruses, which could damage your computer system: you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.