[Haskell-cafe] Functional dependency failure

Alexander Pakhomov ker0sin at ya.ru
Tue Sep 2 20:59:13 UTC 2014


Looks fixed in ghc master. I used 7.6.3
Anyhow, does anybody know a workout?

03.09.2014, 00:46, "Alexander Pakhomov" <ker0sin at ya.ru>:
> Hi!
>
> I have following code:
>
> STRead.hs:
>
> import Control.Monad.Reader
> import Control.Monad.ST
> import qualified Data.Vector.Mutable as MV
> import qualified Data.Vector as V
>
> type ReadVecMonad s = ReaderT (MV.MVector s Int) (ST s)
>
> freezeV :: ReadVecMonad s (V.Vector Int)
> freezeV = ask >>= lift V.freeze
>
> Trying to compile this I have "Couldn't match type ... When using functional dependencies to combine" error
> following with kind mismatch and type with literaly the same type mismatch.
>
> How can I work this around?
>
> There's full error message:
>
> STRead.hs:9:11:
>     Couldn't match type `V.MVector s Int'
>                   with `(->)
>                           (V.MVector
>                              (Control.Monad.Primitive.PrimState
>                                 (ReaderT (V.MVector s Int) (ST s)))
>                              Int)'
>     When using functional dependencies to combine
>       MonadReader r (ReaderT r m),
>         arising from the dependency `m -> r'
>         in the instance declaration in `Control.Monad.Reader.Class'
>       MonadReader
>         ((->)
>            (V.MVector
>               (Control.Monad.Primitive.PrimState
>                  (ReaderT (V.MVector s Int) (ST s)))
>               Int))
>         (ReaderT (V.MVector s Int) (ST s)),
>         arising from a use of `ask' at STRead.hs:9:11-13
>     In the first argument of `(>>=)', namely `ask'
>     In the expression: ask >>= lift V.freeze
>
> STRead.hs:9:19:
>     Couldn't match kind `* -> *' with `*'
>     Expected type: (->)
>                      (V.MVector
>                         (Control.Monad.Primitive.PrimState
>                            (ReaderT (V.MVector s Int) (ST s)))
>                         Int)
>                    -> ReaderT (V.MVector s Int) (ST s) (V.Vector Int)
>       Actual type: (->)
>                      (V.MVector
>                         (Control.Monad.Primitive.PrimState
>                            (ReaderT (V.MVector s Int) (ST s)))
>                         Int)
>                    -> ReaderT (V.MVector s Int) (ST s) (V.Vector Int)
>     Kind incompatibility when matching types:
>       (->)
>         (V.MVector
>            (Control.Monad.Primitive.PrimState
>               (ReaderT (V.MVector s Int) (ST s)))
>            Int) :: * -> *
>       (->)
>         (V.MVector
>            (Control.Monad.Primitive.PrimState
>               (ReaderT (V.MVector s Int) (ST s)))
>            Int) :: *
>     In the return type of a call of `lift'
>     In the second argument of `(>>=)', namely `lift V.freeze'
>
> STRead.hs:9:24:
>     Couldn't match kind `*' with `* -> *'
>     Expected type: V.MVector
>                      (Control.Monad.Primitive.PrimState
>                         (ReaderT (V.MVector s Int) (ST s)))
>                      Int
>                    -> ReaderT (V.MVector s Int) (ST s) (V.Vector Int)
>       Actual type: V.MVector
>                      (Control.Monad.Primitive.PrimState
>                         (ReaderT (V.MVector s Int) (ST s)))
>                      Int
>                    -> ReaderT (V.MVector s Int) (ST s) (V.Vector Int)
>     Kind incompatibility when matching types:
>       (->)
>         (V.MVector
>            (Control.Monad.Primitive.PrimState
>               (ReaderT (V.MVector s Int) (ST s)))
>            Int) :: *
>       (->)
>         (V.MVector
>            (Control.Monad.Primitive.PrimState
>               (ReaderT (V.MVector s Int) (ST s)))
>            Int) :: * -> *
>     In the first argument of `lift', namely `V.freeze'
>     In the second argument of `(>>=)', namely `lift V.freeze'
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list