
Hey ho, This should be a quick one, I hope! I am mucking about with the moadic initialisers for vectors, and am experiencing all kinds of fun. For example, I think I should be able to make a new vector of, say, 3 thingies* long: Prelude Data.Vector.Generic.Mutable> new 3 Now of course, poor old haskell does not know what sort of thing I am going to put in it yet, so it gets a bit cross: <interactive>:1:0: Ambiguous type variable `m' in the constraint: `Control.Monad.Primitive.PrimMonad m' arising from a use of `new' at <interactive>:1:0-4 Probable fix: add a type signature that fixes these type variable(s) <interactive>:1:0: Ambiguous type variables `v', `a' in the constraint: `MVector v a' arising from a use of `new' at <interactive>:1:0-4 Probable fix: add a type signature that fixes these type variable(s) Now I have paid very close attention to this 'Probable Fix', but have not been able to find out precisely how to specify what sort of vector I would like (I guess this is v..) and am even more boggled by 'm'.. I guess this is asking what sort of Monad I am going to use to fill it up? An example would be greatly appreciated. I find the type of 'new' quite interesting: new :: forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, Data.Vector.Generic.Mutable.MVector v a) => Int -> m (v (PrimState m) a) So I did a bit of reading up on exstential types, and I (just about) get what 'forall' does, however I don't know what the (m :: * -> *) and (v :: * -> * -> *) bits mean. Just telling me what they are called would probably be enough to get me googling! I get the feeling I am a bit out of my depth here, but hey ho, I guess that's how you learn to swim! All the best, Phil * thingies == things of some type, which doesn't really matter at the momant.