The Arduino architecture is hard for functional programming, with following reason.
We can’t use smart pointer on the Harvard architecture.
16-bit address bus is bad for smart pointer.
2 kB memory is too small for GC or malloc heap.
We can’t construct any dynamics values without malloc heap.
However, ATS2 language is easy to write code for the architecture, and the ATS2 functional program running on it is safe using dependent type and linear type. Also ATS2’s linear type realizes safe programming without any GC and any malloc. We believe this ATS2 characteristics is good to design IoT devices.