CoreErlang 0.0.1 → 0.0.2
raw patch · 6 files changed
+29/−244 lines, 6 filesdep ~basedep ~parsecnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, parsec
API changes (from Hackage documentation)
+ Language.CoreErlang.Syntax: instance Data Alias
+ Language.CoreErlang.Syntax: instance Data Alt
+ Language.CoreErlang.Syntax: instance Data Atom
+ Language.CoreErlang.Syntax: instance Data Const
+ Language.CoreErlang.Syntax: instance Data Exp
+ Language.CoreErlang.Syntax: instance Data Exps
+ Language.CoreErlang.Syntax: instance Data FunDef
+ Language.CoreErlang.Syntax: instance Data Function
+ Language.CoreErlang.Syntax: instance Data Guard
+ Language.CoreErlang.Syntax: instance Data Literal
+ Language.CoreErlang.Syntax: instance Data Module
+ Language.CoreErlang.Syntax: instance Data Pat
+ Language.CoreErlang.Syntax: instance Data Pats
+ Language.CoreErlang.Syntax: instance Data TimeOut
+ Language.CoreErlang.Syntax: instance Data a => Data (Ann a)
+ Language.CoreErlang.Syntax: instance Data a => Data (BitString a)
+ Language.CoreErlang.Syntax: instance Data a => Data (List a)
+ Language.CoreErlang.Syntax: instance Typeable Alias
+ Language.CoreErlang.Syntax: instance Typeable Alt
+ Language.CoreErlang.Syntax: instance Typeable Atom
+ Language.CoreErlang.Syntax: instance Typeable Const
+ Language.CoreErlang.Syntax: instance Typeable Exp
+ Language.CoreErlang.Syntax: instance Typeable Exps
+ Language.CoreErlang.Syntax: instance Typeable FunDef
+ Language.CoreErlang.Syntax: instance Typeable Function
+ Language.CoreErlang.Syntax: instance Typeable Guard
+ Language.CoreErlang.Syntax: instance Typeable Literal
+ Language.CoreErlang.Syntax: instance Typeable Module
+ Language.CoreErlang.Syntax: instance Typeable Pat
+ Language.CoreErlang.Syntax: instance Typeable Pats
+ Language.CoreErlang.Syntax: instance Typeable TimeOut
+ Language.CoreErlang.Syntax: instance Typeable1 Ann
+ Language.CoreErlang.Syntax: instance Typeable1 BitString
+ Language.CoreErlang.Syntax: instance Typeable1 List
Files
- CoreErlang.cabal +5/−6
- Language/CoreErlang/Parser.hs +2/−3
- Language/CoreErlang/Pretty.hs +1/−2
- Language/CoreErlang/Syntax.hs +21/−19
- hcar/hcar.sty +0/−183
- hcar/template.tex +0/−31
CoreErlang.cabal view
@@ -1,13 +1,12 @@ name: CoreErlang-version: 0.0.1+version: 0.0.2 copyright: 2008, David Castro Pérez, Henrique Ferreiro García license: BSD3 license-file: LICENSE author: David Castro Pérez <dcastrop@udc.es> Henrique Ferreiro García <hferreiro@udc.es>-maintainer: Henrique Ferreiro García <hferreiro@udc.es>- David Castro Pérez <dcastrop@udc.es>-homepage: .+maintainer: Alex Kropivny <alex.kropivny@gmail.com>+homepage: http://github.com/amtal/CoreErlang stability: Experimental category: Language synopsis: Manipulating Core Erlang source code@@ -28,6 +27,6 @@ Language.CoreErlang.Pretty, Language.CoreErlang.Syntax if flag(split-base)- build-depends: base >= 3, parsec == 2.1.0.0, pretty+ build-depends: base >= 3 && < 5, parsec >= 2.1.0.0, pretty else- build-depends: base < 3, parsec == 2.1.0.0+ build-depends: base < 3, parsec >= 2.1.0.0
Language/CoreErlang/Parser.hs view
@@ -5,8 +5,7 @@ -- (c) David Castro Pérez 2008 -- License : BSD-style (see the file LICENSE) ----- Maintainer : Henrique Ferreiro García <hferreiro@udc.es>--- David Castro Pérez <dcastrop@udc.es>+-- Maintainer : Alex Kropivny <alex.kropivny@gmail.com> -- Stability : experimental -- Portability : portable --@@ -166,7 +165,7 @@ return $ Function (a,i) literal :: Parser Literal-literal = liftM LInt integer <|> liftM LFloat float <|>+literal = try (liftM LFloat float) <|> liftM LInt integer <|> liftM LAtom atom <|> nil <|> echar <|> estring nil :: Parser Literal
Language/CoreErlang/Pretty.hs view
@@ -5,8 +5,7 @@ -- (c) David Castro Pérez 2008 -- License : BSD-style (see the file LICENSE) ----- Maintainer : Henrique Ferreiro García--- David Castro Pérez+-- Maintainer : Alex Kropivny <alex.kropivny@gmail.com> -- Stability : experimental -- Portability : portable --
Language/CoreErlang/Syntax.hs view
@@ -5,8 +5,7 @@ -- (c) David Castro Pérez 2008 -- License : BSD-style (see the file LICENSE) ----- Maintainer : Henrique Ferreiro García <hferreiro@udc.es>--- David Castro Pérez <dcastrop@udc.es>+-- Maintainer : Alex Kropivny <alex.kropivny@gmail.com> -- Stability : experimental -- Portability : portable --@@ -14,6 +13,7 @@ -- <http://www.it.uu.se/research/group/hipe/cerl/> -----------------------------------------------------------------------------+{-# LANGUAGE DeriveDataTypeable #-} module Language.CoreErlang.Syntax ( -- * Modules@@ -33,33 +33,35 @@ Ann(..), ) where +import Data.Data+ -- | This type is used to represent variables type Var = String -- | This type is used to represent atoms data Atom = Atom String- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | This type is used to represent function names data Function = Function (Atom,Integer)- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | A CoreErlang source module. data Module = Module Atom [Function] [(Atom,Const)] [FunDef]- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | This type is used to represent constants data Const = CLit Literal | CTuple [Const] | CList (List Const)- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | This type is used to represent lambdas data FunDef = FunDef (Ann Function) (Ann Exp)- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | /literal/. -- Values of this type hold the abstract value of the literal, not the@@ -72,13 +74,13 @@ | LFloat Double -- ^ floating point literal | LAtom Atom -- ^ atom literal | LNil -- ^ empty list- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | CoreErlang expressions. data Exps = Exp (Ann Exp) -- ^ single expression | Exps (Ann [Ann Exp]) -- ^ list of expressions- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | CoreErlang expression. data Exp@@ -99,28 +101,28 @@ | Try Exps ([Var],Exps) ([Var],Exps) -- ^ try expression | Rec [Ann Alt] TimeOut -- ^ receive expression | Catch Exps -- ^ catch expression- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | A bitstring. data BitString a = BitString a [Exps]- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | A list of expressions data List a = L [a] | LL [a] a- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | An /alt/ in a @case@ expression data Alt = Alt Pats Guard Exps- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) data Pats = Pat Pat -- ^ single pattern | Pats [Pat] -- ^ list of patterns- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | A pattern, to be matched against a value. data Pat@@ -130,26 +132,26 @@ | PList (List Pat) -- ^ list pattern | PBinary [BitString Pat] -- ^ list of bitstring patterns | PAlias Alias -- ^ alias pattern- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | An alias, used in patterns data Alias = Alias Var Pat- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | A guarded alternative @when@ /exp/ @->@ /exp/. -- The first expression will be Boolean-valued. data Guard = Guard Exps- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | The timeout of a receive expression data TimeOut = TimeOut Exps Exps- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable) -- | An annotation for modules, variables, ... data Ann a = Constr a -- ^ core erlang construct | Ann a [Const] -- ^ core erlang annotated construct- deriving (Eq,Ord,Show)+ deriving (Eq,Ord,Show,Data,Typeable)
− hcar/hcar.sty
@@ -1,183 +0,0 @@-\ProvidesPackage{hcar}--\newif\ifhcarfinal-\hcarfinalfalse-\DeclareOption{final}{\hcarfinaltrue}-\ProcessOptions--\RequirePackage{keyval}-\RequirePackage{color}-\RequirePackage{array}--\ifhcarfinal- \RequirePackage[T1]{fontenc}- \RequirePackage{lmodern}- \RequirePackage{tabularx}- \RequirePackage{booktabs}- \RequirePackage{framed}- \RequirePackage[obeyspaces,T1]{url}- \RequirePackage- [bookmarks=true,colorlinks=true,- urlcolor=urlcolor,- linkcolor=linkcolor,- breaklinks=true,- pdftitle={Haskell Communities and Activities Report}]%- {hyperref}-\else- \RequirePackage[obeyspaces]{url}-\fi-\urlstyle{sf}--\definecolor{urlcolor}{rgb}{0.1,0.3,0}-\definecolor{linkcolor}{rgb}{0.3,0,0}-\definecolor{shadecolor}{rgb}{0.9,0.95,1}%{0.98,1.0,0.95}-\definecolor{framecolor}{gray}{0.9}-\definecolor{oldgray}{gray}{0.7}--\newcommand{\Contact}{\subsubsection*{Contact}}-\newcommand{\FurtherReading}{\subsubsection*{Further reading}}-\newcommand{\FuturePlans}{\subsubsection*{Future plans}}-\newcommand{\Separate}{\smallskip\noindent}-\newcommand{\FinalNote}{\smallskip\noindent}--\newcommand{\urlpart}{\begingroup\urlstyle{sf}\Url}-\newcommand{\email}[1]{\href{mailto:\EMailRepl{#1}{ at }}{$\langle$\urlpart{#1}$\rangle$}}-\newcommand{\cref}[1]{($\rightarrow\,$\ref{#1})}--\ifhcarfinal- \let\hcarshaded=\shaded- \let\endhcarshaded=\endshaded-\else- \newsavebox{\shadedbox}- \newlength{\shadedboxwidth}- \def\hcarshaded- {\begingroup- \setlength{\shadedboxwidth}{\linewidth}%- \addtolength{\shadedboxwidth}{-2\fboxsep}%- \begin{lrbox}{\shadedbox}%- \begin{minipage}{\shadedboxwidth}\ignorespaces}- \def\endhcarshaded- {\end{minipage}%- \end{lrbox}%- \noindent- \colorbox{shadecolor}{\usebox{\shadedbox}}%- \endgroup}-\fi--\ifhcarfinal- \newenvironment{hcartabularx}- {\tabularx{\linewidth}{l>{\raggedleft}X}}- {\endtabularx}-\else- \newenvironment{hcartabularx}- {\begin{tabular}{@{}m{.3\linewidth}@{}>{\raggedleft}p{.7\linewidth}@{}}}- {\end{tabular}}-\fi--\ifhcarfinal- \let\hcartoprule=\toprule- \let\hcarbottomrule=\bottomrule-\else- \let\hcartoprule=\hline- \let\hcarbottomrule=\hline-\fi--\define@key{hcarentry}{chapter}[]{\let\level\chapter}-\define@key{hcarentry}{section}[]{\let\level\section}-\define@key{hcarentry}{subsection}[]{\let\level\subsection}-\define@key{hcarentry}{subsubsection}[]{\let\level\subsubsection}-\define@key{hcarentry}{level}{\let\level=#1}-%\define@key{hcarentry}{label}{\def\entrylabel{\label{#1}}}-\define@key{hcarentry}{new}[]%- {\let\startnew=\hcarshaded\let\stopnew=\endhcarshaded- \def\startupdated{\let\orig@addv\addvspace\let\addvspace\@gobble}%- \def\stopupdated{\let\addvspace\orig@addv}}-\define@key{hcarentry}{old}[]{\def\normalcolor{\color{oldgray}}\color{oldgray}}%-\define@key{hcarentry}{updated}[]%- {\def\startupdated- {\leavevmode\let\orig@addv\addvspace\let\addvspace\@gobble\hcarshaded}%- \def\stopupdated{\endhcarshaded\let\addvspace\orig@addv}}--\def\@makeheadererror{\PackageError{hcar}{hcarentry without header}{}}--\newenvironment{hcarentry}[2][]%-{\let\level\subsection- \let\startupdated=\empty\let\stopupdated=\empty- \let\startnew=\empty\let\stopnew=\empty-%\let\entrylabel=\empty- \global\let\@makeheaderwarning\@makeheadererror- \setkeys{hcarentry}{#1}%- \startnew\startupdated- \level{#2}%- % test:- \global\let\@currentlabel\@currentlabel-%\stopupdated- \let\report@\empty- \let\groupleaders@\empty- \let\members@\empty- \let\contributors@\empty- \let\participants@\empty- \let\developers@\empty- \let\maintainer@\empty- \let\status@\empty- \let\release@\empty- \let\portability@\empty- \let\entry@\empty}%-{\stopnew\@makeheaderwarning}%--\renewcommand{\labelitemi}{$\circ$}-\settowidth{\leftmargini}{\labelitemi}-\addtolength{\leftmargini}{\labelsep}--\newcommand*\MakeKey[2]%- {\expandafter\def\csname #1\endcsname##1%- {\expandafter\def\csname #1@\endcsname{\Key@{#2}{##1}}\ignorespaces}}-\MakeKey{report}{Report by:}-\MakeKey{status}{Status:}-\MakeKey{groupleaders}{Group leaders:}-\MakeKey{members}{Members:}-\MakeKey{contributors}{Contributors:}-\MakeKey{participants}{Participants:}-\MakeKey{developers}{Developers:}-\MakeKey{maintainer}{Maintainer:}-\MakeKey{release}{Current release:}-\MakeKey{portability}{Portability:}-\MakeKey{entry}{Entry:}--\newcommand\Key@[2]{#1 & #2\tabularnewline}--\newcommand\makeheader-{\smallskip- \begingroup- \sffamily- \small- \noindent- \let\ohrule\hrule- \def\hrule{\color{framecolor}\ohrule}%- \begin{hcartabularx}- \hline- \report@- \groupleaders@- \members@- \participants@- \developers@- \contributors@- \maintainer@- \status@- \release@- \portability@- \hcarbottomrule- \end{hcartabularx}- \endgroup- \stopupdated- \global\let\@makeheaderwarning\empty- \@afterindentfalse- \@xsect\smallskipamount}--% columns/linebreaks, interchanged-\newcommand\NCi{&\let\NX\NCii}%-\newcommand\NCii{&\let\NX\NL}%-\newcommand\NL{\\\let\NX\NCi}%-\let\NX\NCi-\newcommand\hcareditor[1]{ (ed.)&\\}-\newcommand\hcarauthor[1]{#1\NX}%
− hcar/template.tex
@@ -1,31 +0,0 @@-\documentclass{article}--\usepackage{hcar}--\begin{document}--\begin{hcarentry}{CoreErlang}-\report{Henrique Ferreiro Garc\'{i}a}-\participants{David Castro P\'{e}rez}-\status{Parses and pretty-prints all of Core Erlang}-\makeheader--CoreErlang is a haskell library which consists on a parser and-pretty-printer for the intermediate language used by Erlang. The parser uses-the Parsec library and the pretty-printer was modelled after the-corresponding module of the haskell-src package. It also exposes a Syntax-module which allows easy manipulation of terms.--It is able to parse and pretty print all of Core Erlang. Remaining work-includes customizing the pretty printer and refining the syntax interface.--\FurtherReading--\begin{itemize}-\item It can be downloaded from hackage at: -\item A darcs repository is available at: \url{http://code.haskell.org/CoreErlang}-\end{itemize}--\end{hcarentry}--\end{document}