H.HalogenM型
HalogenM is a crucial part of Halogen, often called the "eval" monad
これもEffectの一種
HlogenMを使うことで実現できる
使用するMonadも自由に選択できる
定義
purs(hs)newtype HalogenM state action slots output m a = HalogenM (Free (HalogenF state action slots output m) a)
6つの型引数を取る
state
action
slots
子Componentを持たない場合は、 ()
にする
output
特に指定しない場合は開いておく
親になにか返す時に指定する
m
Effectを実行する時に指定する
特に指定しない場合は開いておく
purs(hs)-- ②Componentのmにも同様の制約を付ける必要がある
component :: forall query input output m. MonadAff m => H.Component query input output m
-- ①HalogenMのmに制約をつけたいなら、
handleAction :: forall output m. MonadAff m => Action -> HalogenM State Action () output m Unit
a
result of the HalogenM expression
以下のどちらかのパターンを取る
handleAction :: Action -> H.HalogenM State Action Slots Output m Unit
handleQuery :: forall a. Query a -> H.HalogenM State Action

は今のところ、前者しか知らん
だから、 Unit
になっているものしか見たことがない
HalogenMによって以下のようなことができる
state
forking threads
starting subscriptions
etc.
微妙に関係ないけど
これの「But we can't use it directly:〜」のところ
handleActionに handleAction :: forall output m. Action -> H.HalogenM State Action () output m Unit
という型を指定しても、その中で Effect m
の関数を直接実行できない
Effect m
の関数を実行できない
MonadEffect m => m a
の関数じゃないと実行できない
だから、 liftEffect
関数を使う
purs(hs)random :: Effect Number
liftEffect :: MonadEffect m ⇒ Effect a → m a
liftEffect random :: MonadEffect m ⇒ m Number
MonadEffect m ⇒ m Number
と Effect Number
って違う意味なの?
参考