Есть ли способ цепочки функций, таких как 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, и этот шаблон часто встречается. Я делаю что-то неправильно?