f = do
let off = getOff >>= computeOffset
getOff :: M Int
computeOffset :: Int -> Int
M
是一个单子。
看起来并不好看。我可以使用糖语法来改进它吗?
答案 0 :(得分:1)
扩展为do
语法可以通过以下方式完成,从:
getOff >>= computeOffset
有一个参数被传递给隐藏的computeOffset
。在转到do
语法之前显示它的内容可能会有所帮助:
getOff >>= \off -> computeOffset off
现在,您可以在第一行中使用do
,然后在第二行中使用off
来编写do
off <- getOff
computOffset off
语法。
Data a []= new Data[27];
答案 1 :(得分:0)
如果computeOffset
的类型为Int -> Int
,并且您希望将其映射到getOff
的结果,则可以使用fmap
:
f :: M Int
f = fmap computeOffset getOff
......或者,使用适用的符号(几乎相同)
f :: M Int
f = computeOffset <$> getOff