constraints-emerge

This plugin allows you to write See test/EmergeSpec.hs for a few examples of what this plugin can do for you.


Keywords
library, mit, Propose Tags , Data.Constraint.Emerge, Data.Constraint.Emerge.Plugin, Hackage, union-constraints, Data.Constraint.Deferrable, GitHub bugtracker, source code, Sandy Maguire, license
License
MIT
Install
cabal install constraints-emerge-0.1.1

Documentation

constraints-emerge: defer instance lookups until runtime

Build Status | Hackage

Dedication

Failure should be our teacher, not our undertaker. Failure is delay, not defeat. It is a temporary detour, not a dead end. Failure is something we can avoid only by saying nothing, doing nothing, and being nothing.

Denis Waitley

Synopsis

{-# LANGUAGE ConstraintKinds     #-}
{-# LANGUAGE FlexibleContexts    #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications    #-}
{-# OPTIONS_GHC -fplugin=Data.Constraint.Emerge.Plugin #-}

module Test where

import Data.Constraint.Emerge

showAnything :: forall c. Emerge (Show c) => c -> String
showAnything c =
  case emerge @(Show c) of
    Just Dict -> show c
    Nothing -> "<<unshowable>>"


showBool = showAnything True  -- "True"
showId   = showAnything id    -- "<<unshowable>>"

Known Bugs

  • constraints-emerge will fail to generate type-equality dictionaries
  • It fails to provide Emerge c dictionaries at runtime.
  • The generated error messages mention mangled type variables; it would be cool if they didn't.

If someone wants to pick it up from here, that’d be great!

Related Work

Contact

Please reports bugs and missing features at the GitHub bugtracker. This is also where you can find the source code.

constraints-emerge was written by Sandy Maguire and is licensed under a permissive MIT license.