Ответ 1
return - это (перегруженная) функция, и она не ожидает, что ее первым аргументом будет ключевое слово. Вы можете либо заключить в скобки:
module Main where
import System(getArgs)
main = do
putStrLn "This is a test"
s <- foo
putStrLn s
foo = do
args <- getArgs
return (case args of
[] -> "No Args"
[s]-> "Some Args")
или используйте удобный оператор приложения ($):
foo = do
args <- getArgs
return $ case args of
[] -> "No Args"
[s]-> "Some Args"
По стилю, я разделил бы его на другую функцию:
foo = do
args <- getArgs
return (has_args args)
has_args [] = "No Args"
has_args _ = "Some Args"
но вам все равно нужно заключить в скобки или использовать ($), потому что возврат принимает один аргумент, а приложение-функция - наивысшее приоритет.