7
なぜテンプレートHaskellはスタンドアロン派生宣言の引用を無視するのですか?テンプレートのスタンドアロン派生宣言Haskellの引用
{-# LANGUAGE TemplateHaskell, StandaloneDeriving #-}
data Test a = Test a
$([d| deriving instance Show a => Show (Test a); f x = x |])
ghci> :l Test.hs
[1 of 1] Compiling Main (Test.hs, interpreted)
Ok, modules loaded: Main.
ghci> :t f
f :: t -> t
ghci> Test 1 :: Test Int
<interactive>:18:1:
No instance for (Show (Test Int)) arising from a use of `print'
Possible fix: add an instance declaration for (Show (Test Int))
In a stmt of an interactive GHCi command: print it
本当に、私はスタンドアロンがライブラリのcostructorを派生していないことに気付きました。引用によってそれを得ることを望んでいた。 – leventov
スタンドアロンの派生はテンプレートHaskellよりも前のコンパイル段階で起こるため、これが原因だと思われます。 typecheckerの代わりにrenamerで、または何か。 –
GHC 7.10以降で動作するはずです(https://ghc.haskell.org/trac/ghc/ticket/8100を参照)。 –