Popularity
7.4
Stable
Activity
0.0
Stable
24
3
4

Monthly Downloads: 55
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Development    
Latest version: v4.1.0

present alternatives and similar packages

Based on the "Development" category.
Alternatively, view present alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of present or a related project?

Add another 'Development' Package

README

present

Make presentations for data types.

Install

Requires: GHC 7.10.3

Install globally into your GHC's global database (via stack) with:

$ sh install-to-global-db.sh

To remove it later:

$ sh remove-from-global-db.sh

To be added: install via stack install present, but it needs to be added to an LTS/nightly version first.

Customizing GHCi

Add to the following to your ~/.ghci:

:seti -XTemplateHaskell
:def presentDebug \e -> return ("let it = " ++ e ++ "\n$(Present.presentIt)")
:def presentQualified \e -> return ("let it = " ++ e ++ "\nPrelude.putStrLn (Present.toShow True $(Present.presentIt))")
:def present \e -> return ("let it = " ++ e ++ "\nPrelude.putStrLn (Present.toShow False $(Present.presentIt))")
:set -package present

Usage

bash-3.2$ stack exec ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
package flags have changed, resetting and loading new packages...
λ> :present "hi"
"hi"

λ> :present 123
123

λ> :present (5.2,"hi",1,'a')
(5.2,"hi",1,'a')

λ> data X a = X a Int

λ> :present X 5 1
X 5 1

λ> :present S88.pack "hi"
"hi"

λ> :present print
<a_0 -> GHC.Types.IO ()>

λ> :present print ()
IO (<GHC.Prim.State# GHC.Prim.RealWorld -> (GHC.Prim.State# GHC.Prim.RealWorld, a_0)>)

λ> :present undefined
<_ :: t_0>

λ> :present id
<a_0 -> a_0>

λ> :present [undefined]
[<_ :: t_0>]

Extension

You can write your own instances like this:

λ> data X = X Int
λ> :present X 5
X 5
λ> instance Present0 X where present0 = ("X",\(X x) -> IntegerPresentation "X" (show x))
λ> :present X 5
5

Detailed output

λ> :presentDebug (2.5,"hi",1,'a')
TuplePresentation
  "(GHC.Types.Double,GHC.Base.String,GHC.Integer.Type.Integer,GHC.Types.Char)"
  [ChoicePresentation
     "GHC.Types.Double"
     [("Floating",IntegerPresentation "GHC.Types.Double" "2.5")
     ,("Show",IntegerPresentation "GHC.Types.Double" "2.5")
     ,("Rational",IntegerPresentation "GHC.Types.Double" "5/2")
     ,("Internal"
      ,DataTypePresentation "GHC.Types.Double"
                            "GHC.Types.D#"
                            [PrimitivePresentation "GHC.Prim.Double#"])]
  ,ChoicePresentation
     "String"
     [("String",StringPresentation "String" "hi")
     ,("List of characters"
      ,ListPresentation
         "[GHC.Types.Char]"
         [ChoicePresentation
            "GHC.Types.Char"
            [("Character",CharPresentation "GHC.Types.Char" "h")
            ,("Unicode point"
             ,ChoicePresentation
                "GHC.Types.Char"
                [("Decimal",IntegerPresentation "GHC.Types.Char" "104")
                ,("Hexadecimal",IntegerPresentation "GHC.Types.Char" "68")
                ,("Binary",IntegerPresentation "GHC.Types.Char" "1101000")])
            ,("Internal"
             ,DataTypePresentation "GHC.Types.Char"
                                   "GHC.Types.C#"
                                   [PrimitivePresentation "GHC.Prim.Char#"])]
         ,ChoicePresentation
            "GHC.Types.Char"
            [("Character",CharPresentation "GHC.Types.Char" "i")
            ,("Unicode point"
             ,ChoicePresentation
                "GHC.Types.Char"
                [("Decimal",IntegerPresentation "GHC.Types.Char" "105")
                ,("Hexadecimal",IntegerPresentation "GHC.Types.Char" "69")
                ,("Binary",IntegerPresentation "GHC.Types.Char" "1101001")])
            ,("Internal"
             ,DataTypePresentation "GHC.Types.Char"
                                   "GHC.Types.C#"
                                   [PrimitivePresentation "GHC.Prim.Char#"])]])]
  ,ChoicePresentation
     "GHC.Integer.Type.Integer"
     [("Decimal",IntegerPresentation "GHC.Integer.Type.Integer" "1")
     ,("Hexadecimal",IntegerPresentation "GHC.Integer.Type.Integer" "1")
     ,("Binary",IntegerPresentation "GHC.Integer.Type.Integer" "1")
     ,("Internal"
      ,DataTypePresentation "GHC.Integer.Type.Integer"
                            "GHC.Integer.Type.S#"
                            [PrimitivePresentation "GHC.Prim.Int#"])]
  ,ChoicePresentation
     "GHC.Types.Char"
     [("Character",CharPresentation "GHC.Types.Char" "a")
     ,("Unicode point"
      ,ChoicePresentation
         "GHC.Types.Char"
         [("Decimal",IntegerPresentation "GHC.Types.Char" "97")
         ,("Hexadecimal",IntegerPresentation "GHC.Types.Char" "61")
         ,("Binary",IntegerPresentation "GHC.Types.Char" "1100001")])
     ,("Internal"
      ,DataTypePresentation "GHC.Types.Char"
                            "GHC.Types.C#"
                            [PrimitivePresentation "GHC.Prim.Char#"])]]