[Haskell-beginners] A few really short beginners questions
Klaus Gy
klausgy at gmail.com
Sun Oct 3 14:39:37 EDT 2010
Thank You very much for the fast replies! I think I expressed myself
badly in the first question. What does not work is the following:
class Test a
instance Num a => Test a
Thanks, fweth
2010/10/3, Brent Yorgey <byorgey at seas.upenn.edu>:
- Zitierten Text ausblenden -
> On Sun, Oct 03, 2010 at 08:00:19PM +0200, Klaus Gy wrote:
>> Hi! I have a few questions to improve my knowledge of Haskell. I
>> didn't stumble over these problems while working on specific tasks, I
>> more or less constructed them explicitly to get an adequate
>> understanding of the basic Haskell semantics.
>>
>> 1
>>
>> Why can't I apply a class directly to all instances of another,
>> existing class? For example why is it possible to write
>>
>> class Test a
>>
>> instance Num a => Test [a]
>>
>> but not with
>>
>> instance Num a => Test a
>>
>> in the last row?
>
> Because these two instances are overlapping: if an instance for Test
> [Int] was wanted, which instance should be chosen? Both 'Test [a]' and
> 'Test a' match 'Test [Int]' so it is ambiguous. Now, it is possible
> to turn on the OverlappingInstances flag, in which case the 'more
> specific' instance (in this case Test [a]) would be chosen, but this
> is generally considered bad for your health unless you Know What You
> Are Doing (tm).
>
>>
>> 2
>>
>> Why is the following example not valid?
>>
>> f :: a -> a
>> f '0' = 0
>> f x = 1
>>
>> I think the reason lies in the type system but I can't locate it
>> exactly.
>
> There is no type information around at runtime, so if f is supposed to
> work for all types it must work *uniformly* for all types: it is not
> possible to say "if the argument is a Char, do this; otherwise, do
> that".
>
>>
>> 3
>>
>> Why is the following legal
>>
>> [] :: Num a => [a]
>>
>> but not with a self declared class instad of Num (unresolved
>> overloading)?
>
> It should be possible with a self declared class. I'd have to see
> more context to see why you are getting this error.
>
>>
>> 4
>>
>> Why does in the declaration
>>
>> f undefined = '0'
>>
>> the expression undefined work apparently in the same way as a
>> wildcard?
>
> In a pattern, names simply match anything and bind that name to the
> value. The fact that you have used the name "undefined" is not
> relevant; it simply shadows any existing binding for the name
> "undefined". So
>
> f blergh = '0'
>
> is precisely the same as
>
> f undefined = '0'
>
> Also, consider this example:
>
> x = 6
>
> f x = 3
> f _ = 9
>
> At first glance you might think that f yields 3 when passed 6 as an
> argument and 9 for everything else; but in fact f always returns 3;
> the two x's have nothing to do with one another.
>
> -Brent
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
More information about the Beginners
mailing list