2016-04-05 35 views
0

私はプログラミング言語の一環としてHaskellを学習しています。私は、Haskellのプログラム全体を書く方法を理解するのにかなりの時間を費やしています。私は、GHCiの中で使用されるような基本的な構文を理解し、私の割り当てはコマンド使用して、.HSファイルを作成し、コンパイル/ WindowsのCMDでそれらを実行する必要が:誰かが私は私だと思いますし、次の例を作成する方法を説明できる場合コンパイル可能/実行可能なHaskellソースコードの例

ghc -o test test.hs 
test.exe 

を進歩するために必要なものを理解するでしょう。

module Main where 
double :: Integer -> Integer 
double x = x * 2 

main :: IO() 
main = double 6 

私はここで何をしたいすべては整数パラメータのdoubleを返す関数を記述し、パラメータで機能主なコールを持つことである「6」。 .hsファイル内のメインモジュールと汎用モジュールを分ける限り、私はどうやって別のことをしなければなりませんか?助けてくれてありがとう。

+1

'double 6'を' print $ double 6'に変更するだけです... – Carsten

+0

をコンパイルしてなぜIO(と恐れられている '' IO' Monad)について少し読んでいいのか確認してください – Carsten

+0

ありがとう、メインがI/Oアクションを完了しなければならないので意味があります。メインで複数のタスクを実行する必要がある場合はどうなりますか? –

答えて

1

ここでの問題は、GHCがコードをコンパイルしているときに、mainがプログラムへのエントリポイントに適したタイプを持つことが予想されることです。 Haskellプログラムは実際には何も観測できないので、「入出力を行うコード」の型を持つ必要があります。

つまり、Xの場合、main :: IO Xが見つかります。 は入出力を行うプログラムであり、最終的には()を生成するプログラムであることを意味するmain :: IO()を使用することをお勧めします。

現在、main :: Integer、タイプエラーがあります。この問題を解決するには、実行時にプログラムで何をするかを決める必要があります。良いデフォルトは何かを印刷することです。 print :: Show a => a -> IO()関数を使うと、与えられた値をshowを使って文字列に変換し、標準出力に出力することができます。あなたは書くことができます

main :: IO() 
main = print (double 6) 

あなたはREPLにいるようにすべて動作します。

IOの詳細は、Real World Haskellを参照してください。モナドなどを理解することなくそれを使うことは完全に可能です。

0

"私の割り当てが必要です..."その後、インストラクターにお尋ねください。彼女があなたにすでに回答を与えたかどうかを最初に確認します(問題の声明または授業で)。

関連する問題