0 | module Rhone.JS.Input
4 | import Rhone.JS.ElemRef
6 | import Rhone.JS.Source
10 | fireAndHold : o -> MSF m (Event o) (HList [o, Event o])
11 | fireAndHold v = fan [hold v, id <|> once v]
15 | (getInput : ev -> Event String)
16 | -> (read : String -> Either String a)
17 | -> (ref : ElemRef HTMLInputElement)
18 | -> MSF JSIO ev (Either String a)
19 | input get read ref =
21 | ^>> fireAndHold (read "")
22 | >>> par [id, ifEvent (leftInvalid ref)]
29 | -> (read : String -> Either String a)
30 | -> (ref : ElemRef HTMLInputElement)
31 | -> MSF JSIO ev (Either String a)
32 | getInput e read ref =
34 | >>> collect [valueOf ref >>^ Ev . read, never]
35 | >>> fireAndHold (read "")
36 | >>> par [id, ifEvent (leftInvalid ref)]