Popularity
6.4
Declining
Activity
0.0
Stable
10
6
3

Monthly Downloads: 14
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Language    
Latest version: v0.4.0.0

zabt alternatives and similar packages

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

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

Add another 'Language' Package

README

Zabt

Simple-minded abstract binding trees.

A utility library for language authors.

Example

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}

module STLC where

import Zabt
import Zabt.Name

data Alg x 
  = App x x
  | Lam x
  deriving (Eq, Ord, Show, Functor, Foldable)

type Exp = Term Name Alg

pattern (:$) :: Exp -> Exp -> Exp
pattern (:$) f x = Pat (App f x) 

pattern (:\) :: Name -> Exp -> Exp
pattern (:\) v e = Pat (Lam (Abs v e))

infixr 0 :\
infixr 1 :$

ex1, ex2, ex3 :: Exp

ex1 = Var "foo"
ex2 = "foo" :\ Var "foo"
ex3 = ex2 :$ ex1

whnf :: Exp -> Exp
whnf x = case x of
  Var _ -> x
  _ :\ _ -> x
  (v :\ e) :$ x -> subst1 (v, x) e

Similar libraries