Итак, вы не сможете получить значение :: [Int]
, потому что это будет небезопасно.Но мы можем получить вам IO [Int]
, а затем передать через >>=
в print
:
main = (sum . read) `fmap` readFile "myFile" >>= print
Если вы используете Control.Applicative
, вы можете сделать его еще красивее:
main = sum . read <$> readFile "myFile" >>= print
Вуаля!Как видите, этот способ гораздо более лаконичен, чем использование примечания do
.do
- примечание отлично подходит для избавления от вложенных лямбд, но во многих случаях это действительно не нужно.
Edit: @ augustss предлагаетследующая превосходная альтернатива:
main = print . sum . read =<< readFile "myFile"
Это потрясающе, так как оно проще и не зависит от Control.Applicative
;что еще более важно, его не нужно читать, чтобы читать «наизнанку», как указывает @ hammar .