İyi günler millet. Monad'larda lütfen biraz açıklık arıyorum ve lütfen bind kullanın (bir kompozit içine girerken .
). Yani bu örnek içinMonadları kompozitlere bağlama (Haskell)
:
--Monadic parts:
readFile :: String -> IO File
putStr :: String -> IO()
-- Non monadic parts
toMatrix :: String -> CustomMatrix
toString :: CustomMatrix -> String
Esasen ben tembel bir dosya (readFile
) daha sonra, özel bir matris üreten bir dize çıkışına matrisi dönüştürme okuyorum
readFile file
gitmek için bağlama
>>=
kullanarak bir karışıklık oluşturmaya başladığında
fileReading :: String -> IO
fileReading file = putStr(toString . toMatrix . readFile file)
budur. Kompozitleri .
kullanmaya devam edebilmem ve okunamayan bir karışıklık yapmadan (gerçekten amacım değil) bağlama ve oluşturma yolunun bir yolu var mı?
Her zaman olduğu gibi, herhangi bir yardım minnetle alınır. Teşekkürler millet.
Değişken ve işlev adları bir basamakla başlayamaz, bu nedenle sorgunuzda '2Matrix' ve' 2String' adını değiştiriyorum. – dave4420
Özür dilerim. Fonksiyonlarımı düşünmeden kısaltıyordum. – BrownE
Bazı monad 'm' için' a -> m b' tipi işlevler için '(.)' Benzetmesi '(<= <)' (Control.Monad'dan) olarak adlandırılır ve Kleisli Bileşimi olarak adlandırılır. Oluşturduğunuz şeyin türüne bağlı olarak '.' ile karıştırabilirsiniz. Örneğin. 'fileReading = putStr. toString. toMatrix <=
luqui