私は Haskell の超初心者で、実際には 10 分前に始めたばかりです。関数内で変数を定義する方法を理解しようとしています。私が機能を持っているとしましょう
foo :: Int -> Int
foo a =
b = a * 2
b
-- Yes, I know, it doesn't do anything interesting
で実行するとGHCi
、構文エラーが発生します。関数内で変数を定義するにはどうすればよいですか?
私は Haskell の超初心者で、実際には 10 分前に始めたばかりです。関数内で変数を定義する方法を理解しようとしています。私が機能を持っているとしましょう
foo :: Int -> Int
foo a =
b = a * 2
b
-- Yes, I know, it doesn't do anything interesting
で実行するとGHCi
、構文エラーが発生します。関数内で変数を定義するにはどうすればよいですか?
これを行うには、次の 2 つの方法があります。
foo a = b where b = a * 2
foo a = let b = a * 2 in b
ほとんどの場合、どちらを選択するかは、技術的なものではなく審美的なものです。より正確にwhere
は、定義にのみ添付let ... in ...
できますが、式が許可されている場所ならどこでも使用できます。との両方でブロックwhere
を導入し、両方の場合で複数の内部変数を便利にします。let
技術的な正しさを無視すると、答えは「ある程度」です。
変数は、与えられた値に評価されるゼロ引数の関数と考える方が良いと思います。
module Main where
import System.IO
foo :: Integer -> Integer
foo a =
b where
b = a * 2
main = do
putStrLn $ show $ foo 10