Есть ли способ цепочки функций, таких как withCString?

Есть ли способ цепочки функций, таких как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

с некоторым соответствующим оператором композиции|.|.

Я пишу библиотеку с большим количеством привязок C, и этот шаблон часто встречается. Я делаю что-то неправильно?

Ответы на вопрос(3)

Ваш ответ на вопрос