summaryrefslogtreecommitdiff
path: root/devel/fourmolu
diff options
context:
space:
mode:
Diffstat (limited to 'devel/fourmolu')
-rw-r--r--devel/fourmolu/DESCR22
-rw-r--r--devel/fourmolu/Makefile26
-rw-r--r--devel/fourmolu/PLIST214
-rw-r--r--devel/fourmolu/buildlink3.mk24
-rw-r--r--devel/fourmolu/distinfo6
-rw-r--r--devel/fourmolu/patches/patch-fourmolu.cabal15
6 files changed, 307 insertions, 0 deletions
diff --git a/devel/fourmolu/DESCR b/devel/fourmolu/DESCR
new file mode 100644
index 00000000000..a64c925dee4
--- /dev/null
+++ b/devel/fourmolu/DESCR
@@ -0,0 +1,22 @@
+Fourmolu is a formatter for Haskell source code. It is a fork of Ormolu,
+with the intention to continue to merge upstream improvements.
+
+We share all bar one of Ormolu's goals:
+
+* Using GHC's own parser to avoid parsing problems caused by
+ haskell-src-exts.
+* Let some whitespace be programmable. The layout of the input influences
+ the layout choices in the output. This means that the choices between
+ single-line/multi-line layouts in certain situations are made by the
+ user, not by an algorithm. This makes the implementation simpler and
+ leaves some control to the user while still guaranteeing that the
+ formatted code is stylistically consistent.
+* Writing code in such a way so it's easy to modify and maintain.
+* That formatting style aims to result in minimal diffs.
+* Choose a style compatible with modern dialects of Haskell. As new Haskell
+ extensions enter broad use, we may change the style to accommodate them.
+* Idempotence: formatting already formatted code doesn't change it.
+* Be well-tested and robust so that the formatter can be used in large
+ projects.
+* We allow configuration of various parameters, via CLI options or config
+ files. We encourage any contributions which add further flexibility.
diff --git a/devel/fourmolu/Makefile b/devel/fourmolu/Makefile
new file mode 100644
index 00000000000..3d6d817ba3c
--- /dev/null
+++ b/devel/fourmolu/Makefile
@@ -0,0 +1,26 @@
+# $NetBSD: Makefile,v 1.1 2022/02/16 10:21:51 pho Exp $
+
+DISTNAME= fourmolu-0.5.0.1
+PKGNAME= ${DISTNAME}
+CATEGORIES= devel
+
+MAINTAINER= pkgsrc-users@NetBSD.org
+COMMENT= Formatter for Haskell source code
+LICENSE= modified-bsd
+
+# lib:fourmolu
+.include "../../converters/hs-aeson/buildlink3.mk"
+.include "../../devel/hs-ansi-terminal/buildlink3.mk"
+.include "../../textproc/hs-Diff/buildlink3.mk"
+.include "../../devel/hs-dlist/buildlink3.mk"
+.include "../../devel/hs-ghc-lib-parser/buildlink3.mk"
+.include "../../textproc/hs-HsYAML/buildlink3.mk"
+.include "../../textproc/hs-HsYAML-aeson/buildlink3.mk"
+.include "../../devel/hs-syb/buildlink3.mk"
+
+# exe:fourmolu
+.include "../../devel/hs-gitrev/buildlink3.mk"
+.include "../../devel/hs-optparse-applicative/buildlink3.mk"
+
+.include "../../mk/haskell.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/devel/fourmolu/PLIST b/devel/fourmolu/PLIST
new file mode 100644
index 00000000000..73cc410def4
--- /dev/null
+++ b/devel/fourmolu/PLIST
@@ -0,0 +1,214 @@
+@comment $NetBSD: PLIST,v 1.1 2022/02/16 10:21:51 pho Exp $
+bin/fourmolu
+lib/${PKGNAME}/${HS_VERSION}/package-description
+lib/${PKGNAME}/${HS_VERSION}/package-id
+lib/${HS_PLATFORM}/${HS_PKGID}/GHC/DynFlags.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/GHC/DynFlags.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/GHC/DynFlags.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Config.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Config.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Config.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/ParseResult.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/ParseResult.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/ParseResult.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/Text.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/Text.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Diff/Text.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Exception.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Exception.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Exception.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Imports.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Imports.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Imports.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/CommentStream.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/CommentStream.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/CommentStream.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Pragma.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Pragma.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Pragma.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Result.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Result.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Parser/Result.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Combinators.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Combinators.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Combinators.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Comments.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Comments.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Comments.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Internal.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Internal.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Internal.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Common.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Common.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Common.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Annotation.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Annotation.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Annotation.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Class.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Class.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Class.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Data.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Data.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Data.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Default.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Default.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Default.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Foreign.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Foreign.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Foreign.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Instance.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Instance.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Instance.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/RoleAnnotation.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/RoleAnnotation.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/RoleAnnotation.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Rule.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Rule.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Rule.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Signature.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Signature.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Signature.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Splice.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Splice.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Splice.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Type.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Type.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Type.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/TypeFamily.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/TypeFamily.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/TypeFamily.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Value.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Value.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Value.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Warning.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Warning.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Declaration/Warning.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/ImportExport.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/ImportExport.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/ImportExport.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Module.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Module.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Module.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Pragma.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Pragma.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Pragma.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Type.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Type.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Meat/Type.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Operators.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Operators.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/Operators.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/SpanStream.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/SpanStream.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Printer/SpanStream.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Common.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Common.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Common.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Cpp.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Cpp.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Cpp.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Preprocess.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Preprocess.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Processing/Preprocess.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Terminal.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Terminal.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Terminal.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/Extensions.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/Extensions.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/Extensions.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/IO.dyn_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/IO.hi
+lib/${HS_PLATFORM}/${HS_PKGID}/Ormolu/Utils/IO.p_hi
+lib/${HS_PLATFORM}/${HS_PKGID}/libHS${HS_PKGID}.a
+lib/${HS_PLATFORM}/${HS_PKGID}/libHS${HS_PKGID}_p.a
+lib/${HS_PLATFORM}/libHS${HS_PKGID}-${HS_VER}.so
+share/doc/${HS_PLATFORM}/${PKGNAME}/LICENSE.md
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/CHANGELOG.md
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Config.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Diff-ParseResult.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Diff-Text.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Exception.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Imports.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Parser-CommentStream.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Parser-Pragma.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Parser-Result.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Parser.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Combinators.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Comments.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Internal.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Common.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Annotation.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Class.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Data.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Default.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Foreign.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Instance.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-RoleAnnotation.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Rule.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Signature.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Splice.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Type.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-TypeFamily.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Value.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration-Warning.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Declaration.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-ImportExport.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Module.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Pragma.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Meat-Type.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-Operators.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer-SpanStream.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Printer.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Processing-Common.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Processing-Cpp.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Processing-Preprocess.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Terminal.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Utils-Extensions.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Utils-IO.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu-Utils.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/Ormolu.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/README.md
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-A.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-All.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-B.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-C.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-D.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-E.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-F.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-G.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-H.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-I.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-L.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-M.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-N.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-O.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-P.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-R.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-S.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-T.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-U.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-V.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index-W.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/doc-index.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/fourmolu.haddock
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/haddock-bundle.min.js
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/index.html
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/linuwial.css
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/meta.json
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/quick-jump.css
+share/doc/${HS_PLATFORM}/${PKGNAME}/html/synopsis.png
diff --git a/devel/fourmolu/buildlink3.mk b/devel/fourmolu/buildlink3.mk
new file mode 100644
index 00000000000..20ca72e4031
--- /dev/null
+++ b/devel/fourmolu/buildlink3.mk
@@ -0,0 +1,24 @@
+# $NetBSD: buildlink3.mk,v 1.1 2022/02/16 10:21:51 pho Exp $
+
+BUILDLINK_TREE+= fourmolu
+
+.if !defined(FOURMOLU_BUILDLINK3_MK)
+FOURMOLU_BUILDLINK3_MK:=
+
+BUILDLINK_API_DEPENDS.fourmolu+= fourmolu>=0.5.0
+BUILDLINK_ABI_DEPENDS.fourmolu+= fourmolu>=0.5.0.1
+BUILDLINK_PKGSRCDIR.fourmolu?= ../../devel/fourmolu
+
+.include "../../converters/hs-aeson/buildlink3.mk"
+.include "../../devel/hs-ansi-terminal/buildlink3.mk"
+.include "../../textproc/hs-Diff/buildlink3.mk"
+.include "../../devel/hs-dlist/buildlink3.mk"
+.include "../../devel/hs-ghc-lib-parser/buildlink3.mk"
+.include "../../textproc/hs-HsYAML/buildlink3.mk"
+.include "../../textproc/hs-HsYAML-aeson/buildlink3.mk"
+.include "../../devel/hs-syb/buildlink3.mk"
+.include "../../devel/hs-gitrev/buildlink3.mk"
+.include "../../devel/hs-optparse-applicative/buildlink3.mk"
+.endif # FOURMOLU_BUILDLINK3_MK
+
+BUILDLINK_TREE+= -fourmolu
diff --git a/devel/fourmolu/distinfo b/devel/fourmolu/distinfo
new file mode 100644
index 00000000000..47f288d6a32
--- /dev/null
+++ b/devel/fourmolu/distinfo
@@ -0,0 +1,6 @@
+$NetBSD: distinfo,v 1.1 2022/02/16 10:21:51 pho Exp $
+
+BLAKE2s (fourmolu-0.5.0.1.tar.gz) = bb38a06236934d40819fac5b0669c08da9b28896508268278079487ceaf2a841
+SHA512 (fourmolu-0.5.0.1.tar.gz) = c6ab6243e13061fccb267631cff30704af43ca9ad477b7152913bba7776ccfec87463477a87048f374e09f6dfbbea5bf28b744958cf80e27e8f49a42d635f3f9
+Size (fourmolu-0.5.0.1.tar.gz) = 155289 bytes
+SHA1 (patch-fourmolu.cabal) = 4786f08a43266270bf9a19ba48ae6e29d2ffbdeb
diff --git a/devel/fourmolu/patches/patch-fourmolu.cabal b/devel/fourmolu/patches/patch-fourmolu.cabal
new file mode 100644
index 00000000000..623cf627320
--- /dev/null
+++ b/devel/fourmolu/patches/patch-fourmolu.cabal
@@ -0,0 +1,15 @@
+$NetBSD: patch-fourmolu.cabal,v 1.1 2022/02/16 10:21:51 pho Exp $
+
+Fix build with optparse-applicative-0.17
+
+--- fourmolu.cabal.orig 2001-09-09 01:46:40.000000000 +0000
++++ fourmolu.cabal
+@@ -124,7 +124,7 @@ executable fourmolu
+ filepath >=1.2 && <1.5,
+ ghc-lib-parser >=9.2 && <9.3,
+ gitrev >=1.3 && <1.4,
+- optparse-applicative >=0.14 && <0.17,
++ optparse-applicative >=0.14,
+ text >=0.2 && <1.3
+
+ if flag(dev)