小编nbr*_*brr的帖子

将变量传递给IO中的多个顺序函数

有一堆IO计算,其结果无关紧要,并且依赖于相同的上下文变量.我希望以一种美学的方式将这个论点传递给所有函数.

假设我想多次打印一个char

c = 'c'
main = do
  putChar c
  putChar c
  putChar c
Run Code Online (Sandbox Code Playgroud)

但我不想每次都写这个参数.

以下工作正常:

samearg :: (Foldable t, Monad m) => t (a -> m ()) -> a -> m ()
samearg fs ctx = foldl (\d f -> d >>= \_ -> f ctx) (return ()) fs
(>^=) = flip samearg

'c' >^= [putChar,putChar,putChar]
Run Code Online (Sandbox Code Playgroud)

现在,我只是好奇我是否可以根据我最初的想法写出一些东西,或者是否有一些标准的方法来做到这一点.我想写一些类似的东西'c' >^= putChar >^= putChar >^= putChar会减少到这一点

((return 'c' >>= putChar >>= \_ -> return 'c')
>>= putChar >>= \_ -> …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
73
查看次数

标签 统计

haskell ×1