Yes of course, P x is a function, and you can't pattern match against functions, I knew that. How silly of me, I could have guessed that myself.<div><div><div><div><div><br></div><div><div><div><div><div class="gmail_quote">
On Mon, Mar 9, 2009 at 5:43 PM, Daniel Fischer <span dir="ltr"><<a href="mailto:daniel.is.fischer@web.de">daniel.is.fischer@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Am Montag, 9. März 2009 17:30 schrieb Peter Verswyvelen:<br>
<div><div></div><div class="h5">> In Haskell, a data constructor can be used partially applied:<br>
> data Pair a b = P a b<br>
><br>
> f = P 1<br>
><br>
> however, I cannot do "partial pattern matching", e.g<br>
><br>
> firstCoord (P x) = x<br>
><br>
> does not work.<br>
><br>
> I guess a very important reason must exist why this is the case?<br>
<br>
</div></div>For one, the type. If x :: a, then P x :: b -> Pair a b, so we'd have<br>
<br>
firstCoord :: (b -> Pair a b) -> a<br>
<br>
But you can pattern-match only on constructors of the appropriate type. P is<br>
not a constructor of (b -> Pair a b) (function types don't have<br>
constructors), so you can't match on a partially applied constructor.<br>
</blockquote></div><br></div></div></div></div></div></div></div></div>