문제

이 구문 문제를 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가 제안한대로하는 것이 바람직하지만, 누군가가 조금 더 잘 이해하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top