2012-10-12 20 views
11

Haskell'de bir veri türü tanımlarken bazı örnekleri otomatik olarak türetmeyi seçebilirsiniz, ancak otomatik türetmeyi erteleyebilir miyim, belki de başka bir kitaplığa koyabilir miyim? HaskellBildirimden sonra türetilen otomatik örnek

Otomatik türetilmesi gerçek bir zaman tasarrufu: Burada

bir örnektir!

module MoneyModule where 

data Money = Money Int 
    deriving Show 

Şimdi MoneyModule kullanmak isteyen, ama ben de Money için Read örneğini istiyorum: Ben ghc olabilir biliyorum ki,

module ExternalModule where 

instance Read Money where 
    read = error "Can't this be done automatically instead?" 

Ama otomatik elde edildiği için ben gerçekten tercih ederdik MoneyModule yazarı, Read örneğini otomatik olarak türetmiş olsaydı yapmışlardı.


bunu biliyorum:

  • Kayıp örneği ile düzeltme tarafından fiili MoneyModule sorunu çözmek için daha iyidir.
  • Yetim durumlarının olması kötü sayılır. Örnek bildirimleri, tercihen, tür sınıfının veya türünün tanımlandığı bir modüle yerleştirilir.

Benim durumumda, tür sınıfının ilişkisiz olması nedeniyle en iyi uygulamaları takip edemiyorum; veri türü . Tür sınıfı modülünün veya veri türü modülünün örneğini tutmak istediğinden şüphe duyuyorum, bu yüzden bazı uygulamalarında örnek bildirime gereksiniminiz olduğundan üçüncü bir kitaplık oluşturuyorum.

cevap

14

GHC Eğer

{-# LANGUAGE StandaloneDeriving #-} 
import MoneyModule 

deriving instance Read Money 

birçok sınıflar için örneklerini türetebilirsiniz, bunda, StandaloneDeriving uzantısı vardır.

4

Tek başına türetme ile ilgili sorunu çözmek için, bkz. Ancak sorunuzda bahsettiğiniz gibi, yetim örnekleri en iyi uygulama değildir ve ghc uyarı üretecektir. ghc yetim uyarılarına göz atmak için bayrağını kullanarak -fno-warn-orphans bayrağını kullanabilirsiniz. Ayrıca cabal dosyanıza da ekleyebilirsiniz:

... 
library 
    exposed-modules: ... 
    ... 
    ghc-options: -fno-warn-orphans 
... 
İlgili konular