Parte de lo que es tan poderoso acerca de Clojure es que todos los tipos de datos centrales implementan la misma abstracción de secuencia: clojure.lang.ISeq.Agregar comportamiento personalizado a las secuencias de Clojure
Esto significa que funciones como "primero", "concat", "contras", "map", "rest", etc. funcionan genéricamente en todos esos tipos de datos.
Mi pregunta es esta: ¿cómo puedo agregar mi propia función personalizada en la mezcla y hacer que funcione para todos los tipos que se extienden desde ISeq?
Un primer intento fue definir mi propio protocolo, luego "(extender tipo clojure.lang.ISeq ...", pero eso no funciona (compila pero no agrega el comportamiento a los tipos reales) Otra idea era escribir una macro que hiciera un "extender-tipo" explícitamente en todos los tipos Clojure (PersistentHashMap, PersistentList, etc.), pero eso parece kludgey.
¿Hay alguna manera elegante/idiomática de hacer esto? ? métodos múltiples, tal vez?
No sé por qué esto tiene downvoted. Esta es la respuesta correcta.Si desea escribir una función que actúe sobre seqs, solo escriba una función que actúe sobre las seqs, y llame (seq arg) en esa función para convertir cualquier colección sequible pasada a una seq. –