2011-12-28 4 views
2

안녕하세요! 동료 프로그래머들!하스켈 호출 기능 onload

내가 하스켈을 사용하여 프로젝트에서 일하고 있어요, 나는 예를 들어, ghci에 두 줄을 입력 할 필요없이 하스켈 기능을 실행하는 방법을 알고

ghci filename.hs function 

이 만 수행 할 수 있습니다 싶었어요 하기 :

ghci filename.hs 
function 

???? 프로그램을 컴파일 할 때 자동으로 실행되는 C에서 main()과 같은 것을 찾고 있는데 그런 것이 있습니까? ghci에서 -e 옵션을 확인했지만 작동하지 않는 것 같습니다!

대단히 감사합니다!

건배!

답변

6

functionIO()입니다. 그런 다음 main = function을 입력하고 명령 행에서 예를 들어 runhaskell modulename을 사용할 수 있습니다. C와 마찬가지로 main은 특별한 기능입니다.

function이 순수한 유형 인 경우 (즉, 유형이 IO을 입력하지 않는 경우) 실제로이를 실행할 수는 없습니다. 나는 이것이 단순화라고 생각하지만, 본질적으로 GHCi가하는 일은 print function이라고 부르는 것입니다. 이것을 모방하려는 경우 main = print function과 같은 것을 사용하고 runhaskell을 사용할 수 있습니다. 이것은 function의 유형이 Show의 인스턴스라고 가정합니다.

+0

최근에 릴리스 된 [ReadArgs] (http://www.reddit.com/r/haskell/comments/nsxwz/readargs10_now_on_hackage/) 라이브러리는 원한다면'main' +'runhaskell' 옵션을 아주 멋지게 만들 수 있습니다. 커맨드 라인에서 args를 함수에 넘깁니다. –

8

당신은 아마 대신 ghc -e 찾고 : 또한

> echo 'foo x y z = x+y*z' > foo.hs % let's make a foo.hs file 
> ghc foo.hs -e 'foo 1 2 3'   % call the function in foo.hs 
=> 7 

, 당신은 또한 ghci에 :reload 명령을 사용할 수 있습니다 메모를. ghci에 파일을로드하고 편집하려면 :reload을 입력하고 다시 테스트하십시오. 당신이 진짜 프로그램을 구축하고자하는 대신에 신속하게 을 테스트하는 경우

> :def test \x -> return (":reload\n" ++ x) 
> :test foo 1 2 3 
=> Ok, modules loaded: Foo. 
7 

이 너무 지루한 것 같다 경우에도, 당신은 또한 당신이 다시로드하고 동시에 당신의 기능을 테스트 할 수있는 ghci 매크로를 정의 할 수 있습니다 귀하의 기능, 그럼 당신은 main 함수를 작성에 다른 답변을 읽어 보시기 바랍니다.

+0

+1 ghci에서 명령 줄 * 및 *': def'에서'ghc -e'를 사용하는 예는 무엇입니까? 좋은! –