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

Michael Snoyman michael at snoyman.com
Tue Oct 9 08:48:56 UTC 2018


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20181009/49432b69/attachment.html>


More information about the Beginners mailing list