Hi,
On Tue, 24 Dec 2013, Tsuyoshi Ito wrote:
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.
I must have mixed up my examples, sorry. You are right in that it should
be "P 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.
There's only one reason I went with that ordering instead of the other.
Let's go back to the previous example (with the typo fixed):
(1) pattern (Num a, Eq b) => P a b :: (Show a) => T a
vs.
(2) pattern (Show a) => P b :: (Num a, Eq b) => T a
it just weirds me out that in (2), (Num a, Eq b) mentions the type
variable b, which doesn't occur in 'T a' (since it is existentially
bound).
Note that this is true in general: only the provided typeclass constraints
can mention existentially bound tyvars.
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.
Yes, I agree 100%, in fact now I really don't want to go back and whatever
syntax is eventually agreed upon, it shouldn't use the function type
notation.
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.
This is definitely *not* something we're adding.
Thanks,
Gergo
--
.--= ULLA! =-----------------.
\ http://gergo.erdi.hu \
`---= ge...@erdi.hu =-------'
Make it possible for programmers to write programs in English, and you will
find that programmers can not write in English.
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users