モナドを使ってこれを一行で書き直す方法はありますか?
input <- getLine
let parsed = reads input :: [(Int,String)]
入力を渡す方法を理解できませんでした。私の試みはラムダ表記について考えているでしょう。
モナドを使ってこれを一行で書き直す方法はありますか?
input <- getLine
let parsed = reads input :: [(Int,String)]
入力を渡す方法を理解できませんでした。私の試みはラムダ表記について考えているでしょう。
の別の場所fmap
! fmap
値を別のもの (この場合は 内) 内で変更するために使用しますgetLine
が、より広く役立ちます。
parsed <- fmap reads getLine :: IO [(Int,String)]
または withimport Data.Functor
またはimport Control.Applicative
あなたはこれを次のように書くことができます
parsed <- reads <$> getLine :: IO [(Int,String)]
コンパイラは、他の場所から意味を推測できる可能性がありますInt
。その場合、明示的な型シグネチャを省略できます。
fmap
知っておくと非常に便利な機能です。詳細については、fmap に関するこの他の回答を参照してください。ここで、ミニ チュートリアルを作成しました。
実際、ワンライナーをきれいに書く方法に興味があるなら、Applicative Functor についてもっと調べる必要があります。