diff options
author | Paul Oliver <contact@pauloliver.dev> | 2025-08-20 19:10:16 +0000 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2025-08-23 22:59:12 +0000 |
commit | 82b02509150b615360118ca381ad8c9fd39d2f29 (patch) | |
tree | 97118f30a334a7b1fc9b6b7f6a8bbcbc87ae5aeb /hsm-gpio/Hsm/GPIO.hs | |
parent | dea39a25938662e6af932bc9a957073d8364dde1 (diff) |
Falls back to `bracket` unless `releaseEff` is needed
Diffstat (limited to 'hsm-gpio/Hsm/GPIO.hs')
-rw-r--r-- | hsm-gpio/Hsm/GPIO.hs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/hsm-gpio/Hsm/GPIO.hs b/hsm-gpio/Hsm/GPIO.hs index 7cc2c36..0e4e2e5 100644 --- a/hsm-gpio/Hsm/GPIO.hs +++ b/hsm-gpio/Hsm/GPIO.hs @@ -21,6 +21,7 @@ import Effectful.Dispatch.Static , getStaticRep , unsafeEff_ ) +import Effectful.Exception (bracket) import Effectful.Resource (Resource, allocateEff, releaseEff) import Foreign.C.String (withCString) import Foreign.C.Types (CSize (CSize), CUInt) @@ -92,12 +93,12 @@ runGPIO consumer action = do (lineSettingsKey, lineSettings) <- lineSettingsBracket (lineConfigKey, lineConfig) <- lineConfigBracket lineSettings (requestConfigKey, requestConfig) <- requestConfigBracket - (_, lineRequest) <- lineRequestBracket chip requestConfig lineConfig - releaseEff requestConfigKey - releaseEff lineConfigKey - releaseEff lineSettingsKey - releaseEff chipKey - evalStaticRep (GPIO lineRequest) action + lineRequestBracket chip requestConfig lineConfig $ \lineRequest -> do + releaseEff requestConfigKey + releaseEff lineConfigKey + releaseEff lineSettingsKey + releaseEff chipKey + evalStaticRep (GPIO lineRequest) action where chipBracket = allocateEff chipAlloc chipDealloc where @@ -148,7 +149,7 @@ runGPIO consumer action = do requestConfigDealloc requestConfig = do logMsg Info "Freeing request config" liftIO $ requestConfigFree requestConfig - lineRequestBracket chip requestConfig lineConfig = allocateEff lineRequestAlloc lineRequestDealloc + lineRequestBracket chip requestConfig lineConfig = bracket lineRequestAlloc lineRequestDealloc where lineRequestAlloc = do logMsg Info "Allocating line request" |