583 research outputs found
Free Applicative Functors
Applicative functors are a generalisation of monads. Both allow the
expression of effectful computations into an otherwise pure language, like
Haskell. Applicative functors are to be preferred to monads when the structure
of a computation is fixed a priori. That makes it possible to perform certain
kinds of static analysis on applicative values. We define a notion of free
applicative functor, prove that it satisfies the appropriate laws, and that the
construction is left adjoint to a suitable forgetful functor. We show how free
applicative functors can be used to implement embedded DSLs which can be
statically analysed.Comment: In Proceedings MSFP 2014, arXiv:1406.153
Constructing applicative functors
Applicative functors define an interface to computation that is more general, and correspondingly weaker, than that of monads. First used in parser libraries, they are now seeing a wide range of applications. This paper sets out to explore the space of non-monadic applicative functors useful in programming. We work with a generalization, lax monoidal functors, and consider several methods of constructing useful functors of this type, just as transformers are used to construct computational monads. For example, coends, familiar to functional programmers as existential types, yield a range of useful applicative functors, including left Kan extensions. Other constructions are final fixed points, a limited sum construction, and a generalization of the semi-direct product of monoids. Implementations in Haskell are included where possible
Regular Functors and Relative Realizability Categories
Relative realizability toposes satisfy a universal property that involves
regular functors to other categories. We use this universal property to define
what relative realizability categories are, when based on other categories than
of the topos of sets. This paper explains the property and gives a construction
for relative realizability categories that works for arbitrary base Heyting
categories. The universal property shows us some new geometric morphisms to
relative realizability toposes too
More on Geometric Morphisms between Realizability Toposes
Geometric morphisms between realizability toposes are studied in terms of
morphisms between partial combinatory algebras (pcas). The morphisms inducing
geometric morphisms (the {\em computationally dense\/} ones) are seen to be the
ones whose `lifts' to a kind of completion have right adjoints. We characterize
topos inclusions corresponding to a general form of relative computability. We
characterize pcas whose realizability topos admits a geometric morphism to the
effective topos.Comment: 20 page
Total Haskell is Reasonable Coq
We would like to use the Coq proof assistant to mechanically verify
properties of Haskell programs. To that end, we present a tool, named
hs-to-coq, that translates total Haskell programs into Coq programs via a
shallow embedding. We apply our tool in three case studies -- a lawful Monad
instance, "Hutton's razor", and an existing data structure library -- and prove
their correctness. These examples show that this approach is viable: both that
hs-to-coq applies to existing Haskell code, and that the output it produces is
amenable to verification.Comment: 13 pages plus references. Published at CPP'18, In Proceedings of 7th
ACM SIGPLAN International Conference on Certified Programs and Proofs
(CPP'18). ACM, New York, NY, USA, 201
What is a categorical model of arrows?
We investigate what the correct categorical formulation of Hughes’ Arrows should be. It has long been folklore that Arrows, a functional programming construct, and Freyd categories, a categorical notion due to Power, Robinson and Thielecke, are somehow equivalent. In this paper, we show that the situation is more subtle. By considering Arrows wholly within the base category we derive two alternative formulations of Freyd category that are equivalent to Arrows—enriched Freyd categories and indexed Freyd categories. By imposing a further condition, we characterise those indexed Freyd categories that are isomorphic to Freyd categories. The key differentiating point is the number of inputs available to a computation and the structure available on them, where structured input is modelled using comonads
A Representation Theorem for Second-Order Functionals
Representation theorems relate seemingly complex objects to concrete, more
tractable ones.
In this paper, we take advantage of the abstraction power of category theory
and provide a general representation theorem for a wide class of second-order
functionals which are polymorphic over a class of functors. Types polymorphic
over a class of functors are easily representable in languages such as Haskell,
but are difficult to analyse and reason about. The concrete representation
provided by the theorem is easier to analyse, but it might not be as convenient
to implement. Therefore, depending on the task at hand, the change of
representation may prove valuable in one direction or the other.
We showcase the usefulness of the representation theorem with a range of
examples. Concretely, we show how the representation theorem can be used to
show that traversable functors are finitary containers, how parameterised
coalgebras relate to very well-behaved lenses, and how algebraic effects might
be implemented in a functional language
- …