Le code disponible à partir github:exemple manquant de MonadReader
{-# LANGUAGE TypeFamilies
, TypeOperators #-}
module Test where
import Control.Monad.Reader
import Control.Lens
import Control.Zipper
class Monad f => Family f where
type Set f
-- This does not work
f :: Family f => (Top :>> [Set f] :>> Set f) -> f (Set f)
f = return . view focus
-- This here works
g :: Top :>> [Int] :>> Int -> Int
g = view focus
compile très bien avec ghc-8
mais ne parvient pas à compiler avec ghc-7.10
avec l'erreur
Test.hs:16:14:
Could not deduce (MonadReader
(Zipper (Top :>> [Set f]) Int (Set f))
((->) ((Top :>> [Set f]) :>> Set f)))
arising from a use of `view'
from the context (Family f)
bound by the type signature for
f :: Family f => (Top :>> [Set f]) :>> Set f -> f (Set f)
at Test.hs:15:6-57
In the second argument of `(.)', namely `view focus'
In the expression: return . view focus
In an equation for `f': f = return . view focus
dans les deux cas exactement les mêmes dépendances sont utilisées (mtl 2.2.1
, transformers 0.5.2
, lens 4.14
, zippers 0.2
) sauf base
qui ne peut être que 4.8
pour ghc-7.10
et 4.9
pour ghc-8
. Je ne peux vraiment pas comprendre pourquoi il devrait compiler avec un compilateur et pas l'autre. Je voudrais aussi que le code fonctionne pour ghc-7.10
.
Je ne peux pas reproduire ceci: ': t les cadres (undefined :: Conf m) & view focus' sont correctement résolus pour' Set m' dans ghci. – zakyggaps
J'ai simplifié le problème et déplacé l'exemple à https://github.com/jakubdaniel/test. – jakubdaniel