A Funckionális Reaktív Programozás (FRP) segítségével tiszta, időtől függő függvényekkel tudunk interaktív programokat leírni. Ez a paradigma először 1997-ben jelent meg, amit kezdetben animációk leírására használtak.
Ennek a paradigmának több válfaja is létezik, a klasszikus FRP-ben folyamatosan változó értékeket (Behavior) és adott időpontban kiváltódó eseményeket (Event) különböztetünk meg. Az Elm nyelv az egyszerűségre törekszik, így itt csak jeleket (Signal) használnuk minden időben változó érték leírására.
Az interakciók leírásának alapja a jelek (Signal), amik időben változó értékek. Példa:
Saját jeleket nem tudunk definiálni, csak a beépítetteket módosítani, mivel ezeknek a jeleknek az értékeit a JavaScript adja. Célunk így az, hogy ezeket a jeleket egy kirajzolható jellé módosítsuk, amit aztán a main függvényünknek értékül adhatunk.
A lift függvény segítségével tiszta függvényekkel tudunk jeleket módosítani, első paramétere egy jel értékét paraméterül kapó függvény, ami így egy új jelet hoz létre.
Ennek egy szebb leírására két infix operátor is használható, a (<~) és (~), amiknek a működése megegyezik a lift-ével.
Ennek segítségével ez a példaprogram az egér aktuális pozíciójára kirajzol egy négyzetet:
Interaktív programunkban a main függvények Signal Element a típusa, azaz egy időben változó grakius elem jele. Ebben a példában a szöveg elementre konvertáló asText függvénnyel módosítjuk az egérpozíció jelét és így egy kirajzolható elemet kapunk: