¿Hay alguna manera de encadenar funciones como withCString?

¿Hay alguna manera de encadenar funciones comowithCString? Con eso me refiero a cualquier función que se parece a algof :: Foo -> (CFoo -> IO a) -> IO a.

Por ejemplo, digamos que hay una funcióncFunc :: CString -> CFoo -> CBar -> IO ()

Usualmente, haría algo como:

haskellFunc string foo bar =
  withCString string $ \ cString ->
    withCFoo foo $ \ cFoo ->
      withCBar bar $ \ cBar ->
        cFunc cString cFoo cBar

Pero me gustaría hacer algo como:

haskellFunc = (withCString |.| withCFoo |.| withCBar) cFunc

con algún operador de composición apropiado|.|.

Estoy escribiendo una biblioteca con muchos enlaces en C, y esta plantilla viene a menudo. ¿Estoy haciendo algo mal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta