[Haskell-beginners] (.) vs ($)
Vale Cofer-Shabica
vale.cofershabica at gmail.com
Sat Apr 4 02:23:52 UTC 2015
Could someone please explain why the commented line fails
spectacularly while the final line succeeds?
>import System.IO (getContents)
>import System.Environment (getArgs)
>fileInput :: IO String
>fileInput = getArgs>>=readFirst where
> readFirst :: [FilePath] -> IO String
> readFirst [] = System.IO.getContents
>--readFirst xs = readFile.head xs
> readFirst xs = readFile $ head xs
I'm particularly confused given the following typings (from ghci):
readFile.head :: [FilePath] -> IO String
readFile.head [] :: a -> IO String
And this is still stranger:
:type readFile.head ["foo", "bar"]
<interactive>:28:16:
Couldn't match expected type `a0 -> FilePath'
with actual type `[Char]'
In the expression: "foo"
In the first argument of `head', namely `["foo", "bar"]'
In the second argument of `(.)', namely `head ["foo", "bar"]'
<interactive>:28:23:
Couldn't match expected type `a0 -> FilePath'
with actual type `[Char]'
In the expression: "bar"
In the first argument of `head', namely `["foo", "bar"]'
In the second argument of `(.)', namely `head ["foo", "bar"]'
Many thanks in advance,
vale
More information about the Beginners
mailing list