f = do
let off = getOff >>= computeOffset
getOff :: M Int
computeOffset :: Int -> Int
M
はモナドです。2つの機能をバインドします。代替構文
よく見えません。私は砂糖構文を使用して改善することはできますか?
do
構文に拡大
f = do
let off = getOff >>= computeOffset
getOff :: M Int
computeOffset :: Int -> Int
M
はモナドです。2つの機能をバインドします。代替構文
よく見えません。私は砂糖構文を使用して改善することはできますか?
do
構文に拡大
で始まる、次の方法で行うことができる:
getOff >>= computeOffset
隠されているcomputeOffset
に渡されるパラメータがあります。それはそれはdo
構文に行く前に、明示的にどのように見えるかを示すために役立つことがあります。
getOff >>= \off -> computeOffset off
今、あなたが第二に、それを使用して、その後、最初の行にoff
を取ることによってdo
構文を書くことができます。
do
off <- getOff
computOffset off
Int -> Int
を入力して、あなたがgetOff
の結果にマッピングすることを、あなたはfmap
を使用することができていcomputeOffset
場合:応用的表記(と、その代わりに、
f :: M Int
f = fmap computeOffset getOff
...かほとんど同じ)
f :: M Int
f = computeOffset <$> getOff
(1)あなたのdoブロックは 'let'行で終わるので、無効です。また、あなたが言及した型では、 'getOff >> = computeOffset'は型チェックされません。実際にやっていることに関連した提案を得るためには、これらの問題を修正する必要があります。 (2)それはおそらく、 'f = getOff >> = computeOffset'を探しているだけで、砂糖はまったく含まれていません。 – duplode