まず、 の後にインデントし、do
関数とその引数の間にスペースを使用する必要があります。
main = do
putStrLn "Enter base"
base <- getLine
putStrLn "Enter height"
height <- getLine
putStrLn ("The area is: " ++ show ((read height * read base) /2))
主な問題は、Haskell ではデータが型間で自動的に変換されないため、文字列に対して数値演算を行うことができず、必要なものを明示する必要があることです。
(このタイプのコンパイル時チェックは、非常に多くのバグの原因を取り除きます。最初はうるさいように見えても、問題を早期に発見することをお勧めします。)
read
数値を作成するには文字列が必要であり、show
その結果を文字列に戻す必要があるため、show ((read height * read base) /2)
ちなみに、これは長方形ではなく三角形の面積を計算しているようです!
改善 - 純粋なコード
主な機能である三角形の計算を IO とは別のものにすると、コードが改善されるため、次のように記述します。
triangle base height = height * base / 2
main = do
putStrLn "Enter base"
base <- readLn -- readLn is handy
putStrLn "Enter height"
height <- readLn
putStr "The area is: "
print (triangle base height) -- print is also handy
readLn
を実行し、結果getLine
を使用read
します。
print
してshow
おりputStrLn
ます。より少ないブラケットを使用するために、改行を開始しない which
を使用しました!putStr