この(やや無意味な)モジュールがコンパイルされます。私はf
のインスタンスの定義を削除した場合、私はメソッドのデフォルトを継承することを期待するコンパイルエラーが
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ExplicitForAll #-}
module Foo where
class A t where
f :: forall x m. Monoid x => t m -> m
f = undefined
instance A [] where
f = undefined
同じものになります。
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ExplicitForAll #-}
module Foo where
class A t where
f :: forall x m. Monoid x => t m -> m
f = undefined
instance A [] where
ただし、これは機能しません。
• Could not deduce (Monoid x0)
arising from a use of ‘Foo.$dmf’
from the context: Monoid x
bound by the type signature for:
f :: Monoid x => [m] -> m
at src/Foo.hs:10:10-13
The type variable ‘x0’ is ambiguous
These potential instances exist:
instance Monoid a => Monoid (IO a) -- Defined in ‘GHC.Base’
instance Monoid Ordering -- Defined in ‘GHC.Base’
instance Monoid a => Monoid (Maybe a) -- Defined in ‘GHC.Base’
...plus 7 others
(use -fprint-potential-instances to see them all)
• In the expression: Foo.$dmf @[]
In an equation for ‘f’: f = Foo.$dmf @[]
In the instance declaration for ‘A []’
私が想像x0
が挿入されている場合、私は知らないので、このエラーを読んでするかどうかはわかりません:GHC 8.0.2は、このエラーが発生します。なぜ2番目の例はコンパイルされませんか?
私はGHCの問題を開設しました:https://ghc.haskell.org/trac/ghc/ticket/14266 –