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