generated at
H.Component型
4つの型引数を取る
内3つは、Halogenの親子の通信の仕方を表すもの


親からなにか受け取る場合は、 query input を指定する
親へなにかを送る場合は、 output を指定する


purs(hs)
data Component (query :: Type -> Type) (input :: Type) (output :: Type) (m :: Type -> Type)


4つの型引数を取る
query
is the query algebra; the requests that can be made of the component
親→子へのquery
Reactで言うと関数型のprops
onChange: (name: string) => void 的な
指定しない場合は開いておく
tellとrequestの2種類ある
tell
親→子へ何かを実行するように命令する
request
親→子だが、子からの情報も必要とする
返り値を持っている 
purs(hs)
data Query a = Tell a | Request (Boolean -> a)
input
is the input value that will be received when the parent of this component renders
親から受けとる引数
reactでいうprops
親のstateが更新されるとinputも自動で更新される
静的propsなのか、動的propsなのかで、evalの指定が異なる
指定しない場合は開いておく
output
is the type of messages the component can raise
子→親へmessage送信
modalのclosing、formのsubmitなどのeventを通知
親が子をsubscriptionするために使う機構といった感じ
指定しない場合は開いておく
m
is the effect monad used during evaluation
EffectモナドAffモナドを指定することが多い
指定しない場合は開いておく
handleActionのH.HalogenM型 m にmonad型制約をつけるなら、H.Componentの m にも同様に付けないといけない
子を持つ場合は、H.ComponentHTML型に対しても同様
逆は成り立たない
つまり、H.Comonentの m に制約をつけても、H.HalogenMの m に付けなくてもいい