DO 블록의 케이스 표현식에 대한 Haskell Syntax
문제
이 구문 문제를 case
a.의 표현 do
차단하다.
올바른 구문은 무엇입니까?
내 예를 바로 잡을 수 있고 그것이 최선이라고 설명 할 수 있다면.
module Main where
main = do
putStrLn "This is a test"
s <- foo
putStrLn s
foo = do
args <- getArgs
return case args of
[] -> "No Args"
[s]-> "Some Args"
약간의 업데이트. 내 소스 파일은 공백과 탭이 혼합되어 모든 종류의 문제를 일으켰습니다. Haskell에서 시작하는 다른 사람을위한 팁입니다. 문제가있는 경우 소스 코드의 탭 및 공간을 확인하십시오.
해결책
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"
StyleWise, 나는 그것을 다른 기능으로 나누었을 것입니다.
foo = do
args <- getArgs
return (has_args args)
has_args [] = "No Args"
has_args _ = "Some Args"
그러나 반환이 하나의 인수를 가져오고 기능 응용 프로그램이 가장 높은 우선이기 때문에 여전히 괄호 화 또는 사용 ($)을 사용해야합니다.
다른 팁
동등하게 :
foo = do
args <- getArgs
case args of
[] -> return "No Args"
[s]-> return "Some Args"
Wnoise가 제안한대로하는 것이 바람직하지만, 누군가가 조금 더 잘 이해하는 데 도움이 될 수 있습니다.
제휴하지 않습니다 StackOverflow