Hi Max,
Yes, I started there :-). There are two other debounce packages registered.
http://package.elm-lang.org/packages/fredcy/elm-debouncer/latest
Basically, all three (counting mine), perform several Process.sleep that are never cancelled, but filtered.
As sometimes happens, the interface of each package matches the vision of the author.
In my case, I wanted the minimum idiomatic expression to go from:
type Msg = UserInput String | ...
view model = ... input [ onInput UserInput ] [] ...
to a debounced event: notify the model, but not too often :-). So
view model = ... input [ onInput (deb1 UserInput) ] [] ...
where deb1 : (a -> Msg) -> (a -> Msg).
or even debounce from the update instead of the view. These scenarios are supported and I am happy with the interface, but not the implementation.
Going to the outside world, with subscription, on this loop of UserInput seems overkill.
Since all debounce packages use the same underlying technique either that's it (for now?), or there might be another way to address this thing.
Debouncing is important so pages can feel comfortable to the user, but nice to the server also ;-).