このような関数を書いています。
func :: IO()
func = putStr print "func = putStr print"
私はそれが間違っていることを知っていますが、アイデアは、出力が次のようになるようにputStr
、文字列にprint
適用してから同じ文字列に適用することです。"fun = .."
func = putStr print "func = putStr print"
これは私の関数定義と同じです。ありがとう
あなたの目標がクワインを書くことである場合(この記事にも別の Haskell の例を示します)、変数のキャプチャーにラムダ表記を使用できます。
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
あなたはこのようにそれを行うことができます:
doActions str actions = mapM_ ($ str) actions
「使用せずに」の部分でどこに行くのかわかりませ>>
んが(それが本当に重要な場合は - 表記法を使用しdo
ます)、同じ入力に2つの関数を順番に適用するヘルパー関数を簡単に書くことができます:
tee f g s = f s >> g s
func = tee putStr print "..."
また、文字列の繰り返しを避けるために、let
orを使用したローカル変数where
がおそらく最も簡単です。
let s = "..."
in putStr s >> print s