Este artículo técnico explica cómo invocar instrucciones de CPU especializadas desde Haskell/GHC, algo que el lenguaje no soporta de forma nativa como hacen C o C++ con el ensamblador en línea o las funciones intrínsecas. El autor toma como caso concreto el producto de dos enteros de 64 bits, del que interesa obtener las dos mitades (alta y baja) en 128 bits, una operación trivial a nivel de código máquina pero no trivial en Haskell.
El texto recorre varias estrategias para devolver varios valores desde una función externa: usar la FFI estándar con puntero (que obliga a recurrir a unsafePerformIO para conservar la pureza, mediante el nivel "safe" o "unsafe"), llamar dos veces al código C para mantener los datos en registros, aprovechar registros SIMD de 128 bits como Word64X2# en el ABI System V, y finalmente la "magia negra" de foreign import prim, que permite declarar funciones primitivas que devuelven varios valores en registros al estilo de un PrimOp de GHC. Se mencionan también opciones como el paquete inline-c, el soporte nativo timesWord2# y la limitación de la FFI de GHC para manejar structs pasados por valor, pendiente en una propuesta del wiki del compilador.
El artículo compara rendimiento entre enfoques y deja los resultados en un repositorio. Se trata de una versión en inglés de un post original en japonés del autor en Qiita, con traducción asistida por IA.
