Formateador de código de Haskell (estilo Fourmolu / Ormolu)
Guía
Formateador de código de Haskell (estilo Fourmolu / Ormolu)
Pega el código fuente de Haskell y obtén el código formateado a un estilo determinista, inspirado en Fourmolu / Ormolu — con espaciado consistente de operadores, directivas LANGUAGE ordenadas, importaciones agrupadas y tabulaciones normalizadas a espacios. Todo se ejecuta localmente en tu navegador, así que tu código fuente nunca abandona tu máquina.
Cómo Usar
- Sube un
.hsarchivo o pega tu código fuente de Haskell en la caja de entrada (usa el enlace "Prueba un ejemplo" para un ejemplo rápido). - Elige el tamaño de la indentación — 2 espacios (predeterminado de Fourmolu) o 4 espacios (predeterminado de Ormolu).
- Establece la longitud máxima de línea utilizada para marcar líneas excesivamente largas en el resumen de validación (predeterminado a 100).
- Palanca Ordenar importaciones, Ordenar y deduplicar directivas LANGUAGEy Comprimir líneas vacías para ajustarse al estilo de tu proyecto.
- El resultado formateado aparece automáticamente con resaltado de sintaxis; utiliza Copiar o Descargar para obtener el resultado.
Características
- Espaciado determinista — añade espacios canónicos alrededor de
=,::,->,<-,=>,$,++, operadores de comparación y combinadores de Applicative / Monad como<$>,<*>,>>=. - Normalización de directivas — mueve cada
{-# LANGUAGE ... #-}directiva a la parte superior del archivo, separa las directivas combinadas en una extensión por línea, las ordena alfabéticamente y elimina duplicados. - Orden de importaciones — ordena las declaraciones consecutivas alfabéticamente por nombre de módulo mientras mantiene la convención de agrupación de cualificadas / no cualificadas.
importdeclaraciones alfabéticamente por nombre de módulo mientras se mantiene la convención de agrupación no cualificada / cualificada. - Segura para el diseño de bloques — conserva la indentación inicial del usuario (la regla de diseño de Haskell es significativa) mientras convierte tabulaciones a espacios usando el ancho de indentación elegido.
- Tokenizador seguro para comentarios — maneja correctamente los comentarios de línea (
--), los comentarios anidados ({- ... -}), las directivas, las cadenas con escapes y literales de caracteres para que los caracteres de operador dentro de ellos nunca se distorsionen. - Validación de paréntesis y bloques — marca paréntesis, corchetes, llaves desequilibrados y comentarios de bloque no terminados con números de línea.
- Informe de líneas largas — resalta cualquier línea que exceda el ancho configurado para que puedas reestructurar antes de la revisión.
- 100% del lado del cliente — tu código se procesa completamente en el navegador; nada se sube, registra ni almacena.
Preguntas frecuentes
-
¿Cuál es la diferencia entre Ormolu y Fourmolu?
Ormolu es un formateador estricto y opiniado de Haskell con prácticamente ninguna configuración — cada proyecto formateado por Ormolu se ve igual. Fourmolu es una rama de Ormolu que expone un conjunto limitado de ajustes de estilo (tamaño de indentación, colocación de comas, comas iniciales vs finales, espaciado de llaves de registros) para equipos que deseen un estilo consistente que no sea idéntico al de Ormolu upstream. Ambos comparten el mismo parser y enfoque basado en AST, por lo que producen código Haskell validamente correcto.
-
¿Por qué es difícil formatear Haskell para modelos de lenguaje generales?
Haskell utiliza la regla de la separación — la indentación es significativa semánticamente y determina dónde comienzan y terminan bloques como let, where, do y case ... of. Un formateador debe comprender el árbol de análisis, no solo el flujo de tokens, para reindentar de forma segura sin cambiar el significado del programa. Los modelos de lenguaje generales razonan sobre el código como texto y producen frecuentemente indentaciones que compilan de forma diferente a la entrada, especialmente en cláusulas where anidadas y lambdas de varias líneas.
-
¿Qué es una directiva LANGUAGE?
Una directiva LANGUAGE es una instrucción de la forma {-# LANGUAGE ExtensionName #-} colocada al principio de un archivo fuente de Haskell para habilitar una extensión de GHC para ese módulo — por ejemplo OverloadedStrings, ScopedTypeVariables o TypeApplications. Las directivas pueden combinarse ({-# LANGUAGE A, B, C #-}) pero la mayoría de las guías de estilo recomiendan una extensión por línea y orden alfabético para facilitar los cambios de dif.
-
¿Por qué se agrupan normalmente los importaciones cualificadas por separado?
La convención agrupa las importaciones cualificadas (import qualified Data.Map as M) después de las importaciones simples (import Data.List) para que el lector pueda escanear primero los nombres no cualificados y ver de inmediato cuáles módulos se acceden mediante alias. Este diseño se produce por defecto en stylish-haskell, Ormolu y Fourmolu, y ayuda a localizar los conflictos de fusión cuando un proyecto añade o elimina alias cualificados.
Instalar extensiones
Agregue herramientas IO a su navegador favorito para obtener acceso instantáneo y búsquedas más rápidas
恵 ¡El marcador ha llegado!
Marcador es una forma divertida de llevar un registro de tus juegos, todos los datos se almacenan en tu navegador. ¡Próximamente habrá más funciones!
Herramientas clave
Ver todo Los recién llegados
Ver todoActualizar: Nuestro última herramienta se agregó el 9 de junio de 2026
