extensible-effectsのEffでMaybeを使う(Failを使う)

 extensible-effectsにはFailという型(作用)があるので、そちらを使うのが一番楽かと思います 🐕

newtype Exc e v = Exc e
type Fail = Exc ()
{-# LANGUAGE FlexibleContexts #-}

import Control.Eff (Member, Eff, run)
import Control.Eff.Exception(Fail, runFail, liftMaybe)

safeHeadEff :: Member Fail r => [a] -> Eff r a
safeHeadEff [] = liftMaybe Nothing
safeHeadEff (x:_) = return x


main :: IO ()
main = do
  let x = run . runFail $ safeHeadEff [1..10]
  print x

ちなみにliftMaybeMという関数をextensible-effectsにPRしました(マージされた)

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。