Buona giornata gente. Sto cercando alcuni chiarimenti sulle monadi per favore e usando bind (mentre si va in un composito .
) per favore.Monade vincolanti in compositi (Haskell)
Così, per questo esempio:
--Monadic parts:
readFile :: String -> IO File
putStr :: String -> IO()
-- Non monadic parts
toMatrix :: String -> CustomMatrix
toString :: CustomMatrix -> String
In sostanza sto pigramente lettura di un file (readFile
) poi produrre una matrice personalizzata, convertendo la matrice a un'uscita stringa. Quindi ritorno.
fileReading :: String -> IO
fileReading file = putStr(toString . toMatrix . readFile file)
Questo è quando ho iniziare a creare un pasticcio utilizzando legano >>=
per andare da readFile file
. C'è un modo per continuare a usare i compositi .
e legare e comporre senza fare un pasticcio illeggibile (non proprio il mio obiettivo).
Come sempre, qualsiasi aiuto viene accolto con gratitudine. Grazie gente.
I nomi di variabili e funzioni non possono iniziare con una cifra, quindi sto rinominando '2Matrix' e' 2String' nella domanda. – dave4420
Scuse. Stavo riducendo i miei nomi di funzioni senza pensare. – BrownE
L'analogia di '(.)' Per le funzioni di tipo 'a -> m b' per alcuni monad' m' è chiamata '(<= <)' (da 'Control.Monad') e si chiama Composizione di Kleisli. Puoi mescolarlo con '.' a seconda dei tipi di ciò che stai componendo. Per esempio. 'fileReading = putStr. accordare . toMatrix <=
luqui