2013-01-14 10 views
7

Warum Vorlage Haskell ignoriert eigenständige Ableitungserklärung in Angebot?Standalone Ableiten Deklaration in Vorlage Haskell-Angebot

{-# 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 

Antwort

7

Dieses verwendet eine Unzulänglichkeit des Compilers zu sein, in dem die Vorlage Haskell Datentyp für Erklärungen auch nicht zum Speichern einer eigenständigen Herleiten Instanz (siehe http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH-Syntax.html#t:Dec) fähig ist.

Seit 7.10 wurde this bug jedoch behoben. (Danke an @VladimirStill, um dies in einem Kommentar unten zu erwähnen.)

+0

Richtig, ich bemerkte das Fehlen eines eigenständigen, abgeleiteten Costruktors in der Bibliothek. Hatte gehofft, es durch Zitate zu bekommen. – leventov

+0

Ich vermute, dies liegt daran, dass das eigenständige Ableiten in einer früheren Kompilierungsphase als Template Haskell erfolgt. Im Renamer anstelle des Typcheckers oder so. –

+0

Es sollte seit GHC 7.10 funktionieren, siehe https://ghc.haskell.org/trac/ghc/ticket/8100. –

Verwandte Themen