So am i right? What fmap does is 1.just selects a structure iterator(probably can be done via _Generic or __builtin_choose_expr/__builtin_types_compatible_p 2.iterate trough it and apply function (for_each(i in a) func(a[i]) nothing mindblowing yet. But what if i wrote my own structure, does fmap construct an iterator on its own? Is fmap hardcoded for haskell structures only? i.e. its giant switch with all thousands of possible structures and object or its some interface to iterators which is fundamental to haskell?