[Haskell-cafe] Unboxed array of product type -> product type of unboxed arrays

Scott Dillard sedillard at ucdavis.edu
Wed Jul 2 13:56:44 EDT 2008


On Wed, Jul 2, 2008 at 11:52 AM, Daniel Fischer <daniel.is.fischer at web.de>
wrote:

>
> Perhaps
>
> class (Ix i) => UArrClass i e where ...
>
> would work?
>
>
class Ix i => UArrClass i e where
  data UArr i e
  unsafeAt_ :: UArr i e -> Int -> e

instance
    ( IArray UArray e
    , IArray UArray f
    , Ix i
    ) => UArrClass i (e,f)
  where
    newtype UArr i (e,f) = UArrPair (UArray i e) (UArray i f)
    unsafeAt_ (UArrPair ea fa) i = (unsafeAt ea i , unsafeAt fa i)

instance
    ( IArray UArray e
    , IArray UArray f
    , UArrClass i (e,f)
    , Ix i
    ) => IArray UArr (e,f)
  where
    unsafeAt = unsafeAt_

test1 :: UArr Int (Int,Int) -> (Int,Int)
test1 a = unsafeAt a 5   --this is line 77

--------------------
Array.hs:77:10:
    Ambiguous type variable `i' in the constraint:
      `Ix i' arising from a use of `unsafeAt' at Array.hs:77:10-21
    Probable fix: add a type signature that fixes these type variable(s)

I think the 'i' there is the one from the method context of IArray,

class IArray a e where
   unsafeAt :: Ix i => a i e -> Int -> e

But that 'i' does not escape to the class context, so I have no way to
address it. I think I need to leave it free, but I can't do that with my
associated type.

Scott
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080702/1bcf698a/attachment.htm


More information about the Haskell-Cafe mailing list