defun-0.1: defun.cabal
cabal-version: 2.4
name: defun
version: 0.1
license: BSD-3-Clause
license-file: LICENSE
author: Oleg Grenrus <oleg.grenrus@iki.fi>
maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>
category: Data
build-type: Simple
extra-doc-files: CHANGELOG.md
tested-with: GHC ==9.2.8 || ==9.4.8 || ==9.6.3 || ==9.8.1
synopsis: Defunctionalization helpers
description:
The package @defun@ provides defunctionalization helpers, most importantly
type family 'DeFun.Core.App' allowing to write higher-order type families.
The @singletons@ package also has its own type family @Apply@,
but the machinery is tied to the @Sing@ / singletons.
.
Once @UnsaturatedTypeFamilies@ extension is implemented in GHC
([Proposal 242](https://github.com/ghc-proposals/ghc-proposals/pull/242)),
this package will become more or less obsolete.
.
In particular, the @Lam@ counterpart @SLambda@ is specialized to @Sing@ arguments.
The @defun@'s @Lam@ is however fully general, so you can use your own singletons
or (importantly) singleton-like arguments.
.
The package provides few defunctionalized functions, and their term-level
reflections using @SBool@ and @NP@ data types from @singletons-bool@ and @sop-core@
packages respectively.
.
This is the "batteries-included" variant with "many" dependencies; see the
@defun-core@ package and other @defun-*@ dependencies if you need a more limited
dependency footprint.
.
The [first-class-families](https://hackage.haskell.org/package/first-class-families) package has slightly different design,
in particular it doesn't reuse existing (nor define) own standalone type families.
In @first-class-families@ everything has to be evaluated via its @Eval@ type family (which job is similar to @App@),
but @defun@ only makes /higher-order/ type families look different.
In short, ergonomics are a bit different.
source-repository head
type: git
location: https://github.com/phadej/defun.git
subdir: defun
common language
default-language: Haskell2010
default-extensions:
DataKinds
EmptyCase
GADTs
KindSignatures
NoImplicitPrelude
PatternSynonyms
PolyKinds
RankNTypes
ScopedTypeVariables
StandaloneKindSignatures
TypeApplications
TypeFamilies
TypeOperators
UndecidableInstances
ViewPatterns
library
import: language
hs-source-dirs: src
exposed-modules: DeFun
build-depends:
, defun-bool >=0.1 && <0.1.1
, defun-core >=0.1 && <0.1.1
, defun-sop >=0.1 && <0.1.1
x-docspec-extra-packages: base
x-docspec-options: -XDataKinds -XGADTs -XStandaloneDeriving
test-suite defun-tests
import: language
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: defun-tests.hs
build-depends:
, base <5
, defun
, sop-core