2016-12-21 3 views
0
f = do 
    let off = getOff >>= computeOffset 

getOff :: M Int 
    computeOffset :: Int -> Int 

Mはモナドです。2つの機能をバインドします。代替構文

よく見えません。私は砂糖構文を使用して改善することはできますか?

do構文に拡大
+9

(1)あなたのdoブロックは 'let'行で終わるので、無効です。また、あなたが言及した型では、 'getOff >> = computeOffset'は型チェックされません。実際にやっていることに関連した提案を得るためには、これらの問題を修正する必要があります。 (2)それはおそらく、 'f = getOff >> = computeOffset'を探しているだけで、砂糖はまったく含まれていません。 – duplode

答えて

1

で始まる、次の方法で行うことができる:

getOff >>= computeOffset 

隠されているcomputeOffsetに渡されるパラメータがあります。それはそれはdo構文に行く前に、明示的にどのように見えるかを示すために役立つことがあります。

getOff >>= \off -> computeOffset off 

今、あなたが第二に、それを使用して、その後、最初の行にoffを取ることによってdo構文を書くことができます。

do 
    off <- getOff 
    computOffset off 
0

Int -> Intを入力して、あなたがgetOffの結果にマッピングすることを、あなたはfmapを使用することができていcomputeOffset場合:応用的表記(と、その代わりに、

f :: M Int 
f = fmap computeOffset getOff 

...かほとんど同じ)

f :: M Int 
f = computeOffset <$> getOff 
関連する問題