Этот вопрос интересный, потому что id
по существу является личностью любой математической группы функций, входящих в состав. Проще говоря, когда вы получаете две противоположные функции и составляете их, вы получаете id
.
Таким образом, любой из них будет работать полиморфно и таким же образом, хотя, естественно, медленнее:
id :: a -> a
----------------------------
id = snd . (0,)
id = fst . (,0)
id = (!! 0) . return
id = ($ 0) . const
id = (\(Just n) -> n) . Just
Или мы могли бы записать его в простой лямбда-выражения, что является хорошей практикой и очень просто:
Все они имеют стиль без точек, что должно быть удовлетворительным для вашего вопроса, но это не просто свободные от очков, но совершенно беспутные. Все эти решения могут показаться очень действительными, и они есть, но они не эквивалент id
. Эти решения, не считая последнего, создают и деконструируют структуры данных, которые являются дорогостоящими по производительности. Стиль, свободный от очков, может быть хорошей практикой, но не везде.
Существует много способов: 'flip const undefined' или' head. return' и многие другие, но нет смысла. –