作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法像 withCString
这样链接函数? ?我的意思是任何
类似于 f :: Foo -> (CFoo -> IO a) -> IO a
的函数.
例如,假设有一个函数 cFunc :: CString -> CFoo -> CBar -> IO ()
通常,我会做类似的事情:
haskellFunc string foo bar =
withCString string $ \ cString ->
withCFoo foo $ \ cFoo ->
withCBar bar $ \ cBar ->
cFunc cString cFoo cBar
haskellFunc = (withCString |.| withCFoo |.| withCBar) cFunc
|.|
.
最佳答案
您可以使用 Cont
inuation applicative组成这些a -> (b -> IO c) -> IO c
功能:
import Control.Monad.Cont
haskellFunc :: String -> Foo -> Bar -> IO ()
haskellFunc string foo bar = flip runCont id $
cFunc <$>
cont (withCString string) <*>
cont (withCFoo foo) <*>
cont (withCBar bar)
haskellFunc' :: String -> Foo -> Bar -> IO ()
haskellFunc' string foo bar = flip runCont id $
cFunc <<$>> withCString string <<*>> withCFoo foo <<*>> withCBar bar
where
f <<$>> x = f <$> cont x
f <<*>> x = f <*> cont x
关于haskell - 有没有办法像 withCString 这样链接函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37379984/
我是一名优秀的程序员,十分优秀!