Howdy,

as usual, the haskell type system complete defeats me in the simplest of 
applications:

import Data.Array.Repa as A
import Data.Array.Repa.Index
import Data.Array.Repa.Shape as AS

main = do
  let x = A.fromList (AS.shapeOfList [2, 2]) ([1.0, 2.0, 3.0, 4.0]::[Double])
  putStrLn $ show x

test_repa.hs:10:13:
    Ambiguous type variable `sh' in the constraint:
      `Shape sh' arising from a use of `show' at test_repa.hs:10:13-18
    Probable fix: add a type signature that fixes these type variable(s)
Failed, modules loaded: none.

After much staring at the type signatures I finally figured out that adding a 
type annotation to x of :

  :: Array DIM2 Double

would fix the problem, but I'm not completely clear as to why.

after all fromList is typed:

(Shape sh, Elt a) => sh -> [a] -> Array sh a

Since it knows [a] is [Double] and sh must be - well I'm not really clear on 
what sh is supposed to be.  therein lies my problem.  Although it does seem 
that sh can be darn near anything, which is probably why it was ambiguous.

At one point I had tried something like (2 :. 2) and got a whole host of errors 
for that too, except that DIM2 is defined in exactly that way, so it's not at 
all obvious why that didn't work.

I was hoping someone could clarify on what's going on.


Thanks,

Brian


_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to