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"
но вам все еще нужно заключить в скобки или использовать ($), потому что return принимает один аргумент, а функция application имеет самый высокий приоритет.