Elm の port において, Unit (()) を引数にとるような場合について微妙にハマったのでメモ.

詳細

以下のような内向きのメッセージ, つまり, 「何かが起こったことだけ知りたい, パラメータは何も渡す必要ない」ような場合を考えます.

port somethingHappend : (() -> msg) -> Sub msg

このとき, JavaScript 側を以下のように記述するとエラーとなってしまいます.

app.ports.somethingHappend.send();
// => Error: Trying to send an unexpected type of value through port 

以下のように, 明示的に null を渡してやることで, エラーにならずメッセージを送信することができます.

app.ports.somethingHappend.send(null);

公式に記述が見つけられないですがどうやらそういうことらしい…

参考

https://stackoverflow.com/questions/41679386/elm-define-subscription-port-with-no-parameters