SORU
20 Ocak 2010, ÇARŞAMBA


Nasıl Kontrol kullanıyorsunuz.Temiz Haskell yazmak için uygulamalı?

Güncel answer to a style question, yazdım

main = untilM (isCorrect 42) (read `liftM` getLine)

ve

isCorrect num guess =
  case compare num guess of
    EQ -> putStrLn "You Win!" >> return True
    ...

Martijn yardımsever önerilen alternatifler:

main = untilM (isCorrect 42) (read <$> getLine)

EQ -> True <$ putStrLn "You Win!"

Ortak desen Haskell kodu net Control.Applicative soyutlamalar kullanarak yapılabilir? Yararlı ne başparmak Denetimi kullanmak için akılda tutulması gereken kurallar.Etkili bir şekilde uygulanabilir mi?

CEVAP
20 Ocak 2010, ÇARŞAMBA


Temelde, monadlar da uygulamalı funktorlar [1]. liftM, liftM2, vb kullanarak kendinizi bulmak zaman. yani, hesaplama birlikte <*> kullanarak zinciri. Bir anlamda, uygulamalı funktorlar fonksiyonlara benzer düşünebilirsiniz. Saf bir fonksiyonu f f <$> x <*> y <*> z yaparak kaldırılabilir.

Monadlar göre, uygulamalı funktorlar argümanlar seçmeli olarak çalıştıramazsınız. Tüm değişkenler yan etkileri yer alacak.

import Control.Applicative

ifte condition trueClause falseClause = do
  c <- condition
  if c then trueClause else falseClause

x = ifte (return True) (putStrLn "True") (putStrLn "False")

ifte' condition trueClause falseClause = 
  if condition then trueClause else falseClause

y = ifte' <$> (pure True) <*> (putStrLn "True") <*> (putStrLn "False")

x True, y oysa çıktıları True False sırayla tek çıktılar.

[1] The Typeclassopedia. Önerilen yüksek.

[2] http://www.soi.city.ac.uk/~ross/papers/Applicative.html. Bu akademik bir kağıt olmasına rağmen, onu takip etmek zor.

[3] http://learnyouahaskell.com/functors-applicative-functors-and-monoids#applicative-functors. Anlaşma çok iyi açıklıyor.

[4] http://book.realworldhaskell.org/read/using-parsec.html#id652399. Parsec kütüphane de uygulamalı bir şekilde nasıl kullanılabileceğini gösterir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • lane182videos

    lane182video

    6 EKİM 2011
  • MVLV28

    MVLV28

    17 Mart 2008