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
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.
Nasıl JavaScript ile boş bir dize için...
Bir dize kontrol etmek için nasıl &quo...
Nasıl iPhone SDK üzerinde etkin bir İn...
Nasıl Server tablo sütun olup olmadığı...
Nasıl kontrol etmek için iOS sürümü?...