2
これも可能ですか?私は変数としてユーザーによって与えられたInt(幅)を保存するメインを持っていますが、私は他の関数の束でその変数が必要です...引数として '幅'を追加する以外にこれを行う方法はありますかすべての機能?コード全体から入力から変数にアクセスできるようにする
これも可能ですか?私は変数としてユーザーによって与えられたInt(幅)を保存するメインを持っていますが、私は他の関数の束でその変数が必要です...引数として '幅'を追加する以外にこれを行う方法はありますかすべての機能?コード全体から入力から変数にアクセスできるようにする
リーダのモナドの使い方の簡単な例を示します。
このコード:
area :: Double -> Double -> Double
area height width = height * width
main = do
width <- fmap read getLine
let result = area 42 width
print result
は次のようになります。
import Control.Monad.Reader
area :: MonadReader Double m => Double -> m Double
area height = do
width <- ask
return (width * height)
main :: IO()
main = do
width <- fmap read getLine
let result = runReader (area 42) width
print result
これは、より複雑なようだが、あなたの周りに渡すための「設定」のパラメータの多くを持っているとき、それは実際には非常にうれしいです。
import Control.Monad.Reader
data Config = Config { width :: Double, color :: String, etc :: String }
area :: MonadReader Config m => Double -> m Double
area height = do
w <- asks width
return (w * height)
main :: IO()
main = do
w <- fmap read getLine
c <- undefined -- todo get color param
e <- undefined -- todo get etc param
let result = runReader (area 42) (Config w c e)
print result
の可能性のある重複した[ハスケル - グローバル変数(関数)をシミュレート] Rakete1111 OP @ – Rakete1111
を記述する必要はありません(http://stackoverflow.com/questions/16811376/haskell-simulate-global-variablefunction)状態、読み取りのみ。 – Alec
@Alecしかし、いずれにしても、Haskellの変数を変更することはできません。それにもかかわらず、OPは、ユーザーからの入力をそのOPに書き込む必要があります。 – Rakete1111