2013-01-14 21 views
7

Tại sao Mẫu Haskell bỏ qua khai báo dẫn xuất độc lập trong báo giá?Tuyên bố truy xuất độc lập trong báo giá Bản mẫu 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 

Trả lời

7

này đã từng là một thiếu sót của trình biên dịch, nơi datatype Template Haskell cho tờ khai là thậm chí không có khả năng lưu trữ một trường hợp độc lập phát sinh (xem http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH-Syntax.html#t:Dec).

Kể từ 7,10, mặc dù, this bug đã được sửa. (Cám ơn @VladimirStill vì đã chỉ ra điều này trong phần bình luận dưới đây.)

+0

Đúng, tôi nhận thấy sự vắng mặt của người đồng sáng lập độc lập trong thư viện. Đã hy vọng để có được nó thông qua các trích dẫn. – leventov

+0

Tôi nghi ngờ điều này là do phát sinh độc lập xảy ra trong giai đoạn biên dịch sớm hơn so với Mẫu Haskell. Trong renamer thay vì typechecker, hoặc một cái gì đó. –

+0

Nó sẽ hoạt động kể từ GHC 7.10, xem https://ghc.haskell.org/trac/ghc/ticket/8100. –