Existe uma maneira de encadear funções como withCString?
Existe uma maneira de encadear funções comowithCString
? Com isso, quero dizer qualquer função que se pareça com algof :: Foo -> (CFoo -> IO a) -> IO a
.
Por exemplo, digamos que há uma funçãocFunc :: CString -> CFoo -> CBar -> IO ()
Normalmente, eu faria algo como:
haskellFunc string foo bar =
withCString string $ \ cString ->
withCFoo foo $ \ cFoo ->
withCBar bar $ \ cBar ->
cFunc cString cFoo cBar
Mas eu gostaria de fazer algo como:
haskellFunc = (withCString |.| withCFoo |.| withCBar) cFunc
com algum operador de composição apropriado|.|
.
Estou escrevendo uma biblioteca com muitas ligações C, e esse texto padrão vem com frequência. Estou fazendo algo errado?