> pattern (Num a, Eq b) => P a b :: (Show a) => T a Is “P a b” a typo for “P b”? Otherwise I cannot see how we can read from this signature that pattern synonym P should be used with one argument, which is a pattern of type b.
Is there a reason why the leftmost context is the provided one and the context after :: is the required one, rather than the other way around? I am asking this not because I think the other way is better, but because to me both look equally good (or equally confusing) and I can imagine that I will have trouble remembering which context means which, no matter which way is chosen. One thing I like about the above notation better than > pattern P :: > b -> T t > requires (Show t) > provides (Num t, Eq b) or > pattern P :: (Show t) => b -> T t => (Num t, Eq b) is that it avoids the use of type constructor (->) because P is neither an expression nor a pattern of type “b -> T t”. At best, P is a “pattern function” from a pattern of type b to a pattern of type T t, and it has little to do with the function type “b -> T t” if I am not mistaken. By the way, do you allow higher-order pattern functions such as pattern Q p <- p "Hello" with which Q P evaluates to MkT (f -> True) "Hello" ? I guess they are not allowed, but if they are allowed, I do not know how their types can be expressed in the syntax you proposed. Best regards, Tsuyoshi _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users