I'm working on learning some Haskell (please excuse the newbie error)-
This routine errors out. My understanding of the do & <- syntax is that they extract the non-Monad type from the monad. So that understanding is flawed: what's the correct understanding here?
exister :: String -> Bool exister path = do fileexist <- doesFileExist path direxist <- doesDirectoryExist path return fileexist || direxist error
ghc -o joiner joiner.hs joiner.hs:53:2: Couldn't match expected type `Bool' against inferred type `m Bool' In the first argument of `(||)', namely `return fileexist' In the expression: return fileexist || direxist In the expression: do { fileexist <- doesFileExist path; direxist <- doesDirectoryExist path; return fileexist || direxist }
returnis not much like "return" in most languages. If you want a function that takes a number n, and "returns" n+1, you writef n = n + 1, notf n = return n+1.