aboutsummaryrefslogtreecommitdiff
path: root/hsm-gpio/Hsm/GPIO.hs
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2025-08-20 19:10:16 +0000
committerPaul Oliver <contact@pauloliver.dev>2025-08-23 22:59:12 +0000
commit82b02509150b615360118ca381ad8c9fd39d2f29 (patch)
tree97118f30a334a7b1fc9b6b7f6a8bbcbc87ae5aeb /hsm-gpio/Hsm/GPIO.hs
parentdea39a25938662e6af932bc9a957073d8364dde1 (diff)
Falls back to `bracket` unless `releaseEff` is needed
Diffstat (limited to 'hsm-gpio/Hsm/GPIO.hs')
-rw-r--r--hsm-gpio/Hsm/GPIO.hs15
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"