[Haskell-beginners] why is ScopedTypeVariables not fixing this error?

Dennis Raddle dennis.raddle at gmail.com
Tue Oct 9 08:55:00 UTC 2018


That was easy. Thanks. I actually tried putting forall a in front of the
line getting the error, but to no avail. Now fixed.

D

On Tue, Oct 9, 2018 at 1:49 AM Michael Snoyman <michael at snoyman.com> wrote:

> You need to put a `forall a.` in front of the `Ord a` constraint. To quote
> the manual on the language extension[1]
>
> > Enable lexical scoping of type variables explicitly introduced with
> forall.
>
> If it helps, the requirement of forall to be able to refer to the variable
> was non-obvious to me the first time I tried to use the extension.
>
> [1]
> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#ghc-flag--XScopedTypeVariables
>
> On Tue, Oct 9, 2018 at 11:45 AM Dennis Raddle <dennis.raddle at gmail.com>
> wrote:
>
>> In the following snippet from a program in progress (designed to compute
>> percentile rank for arbitrary lists of values) , I was hoping to declare
>> types of functions within the main function just as a way of helping myself
>> catch type errors. I'm getting the error "Can't match 'a' with 'a1'....
>> where 'a' is rigid type variable... etc. etc." on the line indicated in the
>> comment below. The usual error I get when I try to do this without
>> ScopedTypeVariables. So, I thought that ScopedTypeVariables was supposed to
>> allow this kind of usage. What am I doing wrong?
>>
>>
>> {-# LANGUAGE ScopedTypeVariables #-}
>>
>> import qualified Data.Map as M
>> import qualified Data.List as L
>> import Data.Map(Map)
>> import Data.Function
>>
>> -- <percent at or below> <percent below>
>> data PercentileData = PercentileData Double Double
>>
>> -- new attempt, October 2018: using new PercentileData construct to
>> -- represent percentile in both ways. (at/below, or below)
>> computePercentile :: Ord a => Map a Double -> Map a PercentileData
>> computePercentile dataIn = error "foo"
>>   where
>>     pairs :: [(a,Double)]  -- THIS IS THE LINE GETTING THE ERROR
>>     pairs = L.sortBy (compare `on` snd) $ M.toList dataIn
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20181009/49b31e67/attachment.html>


More information about the Beginners mailing list