Der Code erhältlich von github:Fehlende Instanz 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
kompiliert mit ghc-8
in Ordnung, aber nicht mit ghc-7.10
mit dem Fehler
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
in beiden Fällen genau die gleichen Abhängigkeiten verwendet werden, kompilieren (mtl 2.2.1
, transformers 0.5.2
, lens 4.14
, zippers 0.2
), ausgenommen base
, die nur 4.8
fürsein könnenund 4.9
für ghc-8
. Ich kann wirklich nicht herausfinden, warum es mit einem Compiler kompilieren sollte und nicht mit dem anderen. Ich möchte den Code auch für ghc-7.10
arbeiten lassen.
Ich kann das nicht reproduzieren: ': t Frames (undefined :: Conf m) & view focus' ist richtig aufgelöst in' Set m' in ghci. – zakyggaps
Ich habe das Problem vereinfacht und das Beispiel nach https://github.com/jakubdaniel/test verschoben. – jakubdaniel