SORU
12 NİSAN 2012, PERŞEMBE


Yesod istisnalar

ipc çok ilkel bir form (ve belirli bir düzen içinde bazı kelimeler vardı bir Dize telnet gönder) kullanılan bir daemon yaptırdım. Ondan kurtuldum ve şimdi JSON Yesod sunucuya mesaj iletmek için kullanıyorum. Ancak, gerçekten benim tasarım hakkında sevdiği bir şey vardı, benim seçimlerim şimdi ne olduğundan emin değilim.

Yaptığım şey şu:

buildManager :: Phase -> IO ()
buildManager phase = do
  let buildSeq = findSeq phase
      jid = JobID $ pack "8"
      config = MkConfig $ Just jid
  flip C.catch exceptionHandler $ 
  runReaderT (sequence_ $ buildSeq <*> stages) config
  -- ^^ I would really like to keep the above line of code, or something like it.
  return ()

buildSeq her işlevi bu gibi görünüyor

foo :: Stage -> ReaderT Config IO ()

data Config = MkConfig (Either JobID Product) BaseDir JobMap

JobMap mevcut işler hakkında bilgileri takip eden TMVar Map.

şimdi, ben bütün bu gibi İşleyicileri

foo :: Handler RepJson

foo cinim, her işleyicisi farklı bir JSON nesne işlem gerekebilir için bir komut temsil eder.

Yapmak istediğim başarı, ve bazı özel durum hakkında bilgi espresses başka bir JSON nesnesi gösteren bir tane gönderebilir JSON nesnedir.

İstiyorum foos yardımcı işlevi yapabilmek için iade Either, ama emin değilim nasıl olsun, artı yeteneği sonlandırmak değerlendirme listeme eylem buildSeq.

Burada gördüğüm tek seçenek

1) exceptionHandler İşleyicisi içinde olduğundan emin olun. App kayıt JobMap koy. getYesod JobMap uygun değer hakkındaki özel ayrıntıları gösteren,alter daha sonra foo tarafından erişilebilir

Daha iyi bir yolu var mı?

Diğer seçeneklerim nelerdir?

Netlik,Handler RepJson rolünü anlatacağım. Edit: Sunucu 23* stop report*gibi komutları kabul etmek için bir yol ihtiyacı var. İstemci bu komutların sonuçları bilmenin bir yolu ihtiyacı var. Hangi sunucu ve istemci birbirleri ile iletişim aracı olarak JSON seçtim. Sadece/JSON yönetmek için İşleyicisi türünü kullanarak başka bir şey değilim.

CEVAP
11 EKİM 2012, PERŞEMBE


Felsefi açıdan, Haskell/Yesod dünyanın değerleri öne geçmek yerine, onlara geri dönmek istiyorum. Yani işleyicileri bir değer döndürmek yerine, onları ileriye çağrısı bir özel durum oluşturmak için olabilir sürecinde bir sonraki adım için.

Unutmayın ki paket bir miktar gelecekteki eylemleri tek bir nesne, yani iletebilirsiniz devamı nesneye işleyicileri ve foos temelde söyler onlara, "Sonra sana, bu blob kodu." Bu şekilde geçersiz ve geri bir şey olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DRDAnimation

    DRDAnimation

    28 EYLÜL 2012
  • Felice Musique

    Felice Musiq

    22 NİSAN 2014
  • Flohoo

    Flohoo

    12 EYLÜL 2009