2016-03-23

American Cheeses

*page is a stub. You can help [America](https://www.cia.gov/library/publications/the-world-factbook/geos/us.html) by [expanding](/_edit/American Cheeses) it.*

The question is inevitable: What do we think about American cheeses?

*To paraphrase [Gandhi](http://www.ccs.neu.edu/home/will/CPP/gandhi.html), we think they would be a good idea.*

<a href="http://www.google.com">![American_cheese](/American_cheese.jpg) ![velveeta](/velveeta.jpg) </a>

See also [Cheese/Yummy](/Cheese/Yummy)

and [French Cheeses](/French Cheeses)

This goes down better with a coke:

![alt text](/tmp2.png)

American_cheese.jpg

Cheese/American

**This page has been deprecated, please see the new page [American Cheeses](/American Cheeses)**

Well, this is crazy, why the update?

# American Cheeses

*This page is a stub. You can help [America](https://www.cia.gov/library/publications/the-world-factbook/geos/us.html) by [expanding](American?edit&revision=HEAD) it.*

The question is inevitable: What do we think about American cheeses?

![American_cheese](/American_cheese.jpg) ![velveeta](/velveeta.jpg)

See also [Yummy](), [Cheese/Yummy](Yummy)

and [French Cheeses](/French Cheeses)

Of Course, we could always just eat [Canadian Cheese/Canadians]()

Cheese/American/Sliced

Sliced cheese is the best!

Cheese/Canadian Cheese/Canadians

Intuit Canada 18559357526 Support Numbers

1. 1-855 935-7526

2. 1-855 276-2781

3. 1-800 9.3-7315

Canada, USA, Australia, United Kingdom, New Zealandwww.qbhub.com

1-855 935-7526 Intuit Quick Books Technical Support USA

1-855-935-7526 quickbooks help phone number canada california, quickbooks help phone number canada canada, quickbooks helpline phone number canada, quickbooks helpline phone number canada califoprnia, quickbooks support phone number canada canada, quickbooks support phone number canada payroll, quickbooks support phone number canada california, quickbooks support phone number canada , quickbooks support phone number canada australia, quickbooks support phone number canada uae, quickbooks help phone number canada us, quickbooks help phone number canada, quickbooks technical support phone number canada , australia, quickbooks remote access help phone number canada, quickbooks help phone canada. quickbooks help desk phone number canada, quickbooks online help desk phone number canada, quickbooks enterprise help phone number canada, quickbooks phone number canada for help, quickbooks support phone number canada intuit, quickbooks help phone line, quickbooks online help phone number canada, quickbooks payroll help phone number canada, quickbooks pro help phone number canada, quickbooks proadvisor help phone number canada, quickbooks pos help phone number canada, quickbooks technical help phone number canada. quickbooks help number canada california. quickbooks 2013 help phone number canada. Quickbooks intuit phone number canada customer support

Quickbooks intuit phone number canada,

Quickbooks intuit payroll contact phone number canada

Quickbooks intuit payroll customer service phone number canada

Quickbooks intuit online payroll support phone number canada

Quickbooks intuit customer service phone number canada

Quickbooks Quicken technical support phone number canada

Quickbooks Quicken tech support phone number canada

Quickbooks Quicken support phone number canada

Quickbooks Quicken customer support phone number canada

Quickbooks Quicken customer service phone number canada

Quickbooks intuitQuicken support phone number canada

Quickbooks phone number canada forQuicken support

Quickbooks Quicken help desk phone number canada

Quickbooks Quicken phone number canada for support

Quickbooks intuitQuicken customer support phone number canada

Quickbooks Quicken support phone number canada usa

Quickbooks Quicken intuit support phone number canada

Quickbooks customer support phone number canada

Quickbooks customer service phone number canada

Quickbooks online customer support phone number canada

Quickbooks online customer service phone number canada

Quickbooks customer service support phone number canada

Quickbooks customer service number canada

Quickbooks online customer service

Quickbooks customer service phone number canada usa

Quickbooks customer support number canada

Quickbooks phone number canada for customer support

Quickbooks phone number canada customer service

Quickbooks online customer support

Quickbooks customer support phone

Quickbooks customer service phone

Quickbook technical support phone number canada

Quickbooks technical support number canada

Quickbooks hotmail technical support phone number canada

Quickbooks online technical support phone number canada

1855 935_7526 Intuit Customer Service number canada

1855 935_7526 Intuit Customer Care number canada

1855 935_7526 Intuit QuickBooks Customer Service number canada

1855 935_7526 Intuit Quickbooks Customer Care number canada

1855 935_7526 QuickBooks Customer Service number canada

1855 935_7526 QuickBooks Customer Care number canada

1855 935_7526 Intuit Customer Support number canada

1855 935_7526 Intuit QuickBooks Customer Support number canada

1855 935_7526 Intuit Customer Service Phone number canada

1855 935_7526 Intuit Customer Care Phone number canada

1855 935_7526 Intuit QuickBooks Customer Service Phone number canada

1855 935_7526 Intuit Quickbooks Customer Care Phone number canada

1855 935_7526 QuickBooks Customer Service Phone number canada

1855 935_7526 QuickBooks Customer Care Phone number canada

1855 935_7526 Intuit Customer Support Phone number canada

1855 935_7526 Intuit QuickBooks Customer Support Phone number canada

1855 935_7526 Call Intuit

1855 935_7526 Call Intuit QuickBooks

1855 935_7526 Contact Intuit

1855 935_7526 Contact Intuit QuickBooks

1855 935_7526 Call QuickBooks

1855 935_7526 Contact Quickbooks

Hi All, Facebook users have liked QuickBooks technical support phone number canada 1-855-935-7526 for the simple reason that the service they got was excellent on www.facebook.com. Tripadvisor users have reviewed Intuit Quickbooks Intuit Technical Support Phone number canada +1 855 935 7526 as the best on their forum www.TripAdvisor.com. Amazon also sells Intuit Quickbooks tech support phone number canada 1-855-935-7526 on its platform www.amazon.com because they know it is a great company. Apple users have been posting on www.twitter.com that Intuit tech support phone number canada 1-855-935-7526 is the best. Apple also has a handle for Intuit Quickbooks tech support phone number canada 1-855-935-7526 on their app store www.apple.com. Twitter gets a lot of tweets daily for Quickbooks Customer Care phone number canada 1-855-935-7526. There are amazing videos of Intuit Quickbooks Customer Care phone number canada 1-855-935-7526 on youtube on their site www.youtube.com they say it is great. Quickbooks technical support Helpline phone number canada 1-855-935-7526 is for servicing to all USA / CANADA Customers as appeared in the Forbes Magazine 2015. Forbes Magazine reviews say that Quickbooks technical support Helpline number canada 1-855-935-7526 Proadvisor and Pro Advisor are the best Payroll Softwares in the USA / CANADA at the moment. According to a survey done by Forbes magazine BMW, Rolex, Sony, Canon, Lego Group, Volkswagon, Nestle, Intel, IBM,Rolls Royce Aerospace etc are all the various clients of Quickbooks technical support Helpline 1-855-935-7526 and using their products. Youtube videos have been telling us the story of Intuit Quickbooks Technical Support Phone number canada +1 855 935 7526 on the url. Intuit Quickbooks Technical Support Phone number canada +1 855 935 7526 has been the pioneer in the field of providing service in terms of issues related to Quickbooks, Payroll Support phone number canada 1855 935 7526, Turbotax Tech support phone number canada 1855 935 7526

Hi All, Facebook users have liked QuickBooks technical support phone number 1-855-935-7526 for the simple reason that the service they got was excellent on www.facebook.com. Tripadvisor users have reviewed Intuit Quickbooks Intuit Technical Support Phone number +1 855 935 7526 as the best on their forum www.TripAdvisor.com. Amazon also sells Intuit Quickbooks tech support phone number 1-855-935-7526 on its platform www.amazon.com because they know it is a great company. Apple users have been posting on www.twitter.com that Intuit tech support phone number 1-855-935-7526 is the best. Apple also has a handle for Intuit Quickbooks tech support phone number 1-855-935-7526 on their app store www.apple.com. Twitter gets a lot of tweets daily for Quickbooks Customer Care phone number 1-855-935-7526. There are amazing videos of Intuit Quickbooks Customer Care phone number 1-855-935-7526 on youtube on their site www.youtube.com they say it is great. Quickbooks technical support Helpline phone number 1-855-935-7526 is for servicing to all USA / CANADA Customers as appeared in the Forbes Magazine 2015. Forbes Magazine reviews say that Quickbooks technical support Helpline number 1-855-935-7526 Proadvisor and Pro Advisor are the best Payroll Softwares in the USA / CANADA at the moment. According to a survey done by Forbes magazine BMW, Rolex, Sony, Canon, Lego Group, Volkswagon, Nestle, Intel, IBM,Rolls Royce Aerospace etc are all the various clients of Quickbooks technical support Helpline 1-855-935-7526 and using their products. Youtube videos have been telling us the story of Intuit Quickbooks Technical Support Phone number +1 855 935 7526 on the url

&

. Intuit Quickbooks Technical Support Phone number +1 855 935 7526 has been the pioneer in the field of providing service in terms of issues related to Quickbooks, Payroll Support phone number 1855 935 7526, Turbotax Tech support phone number 1855 935 7526 and Proadvisor Tech support phone number 1855 935 7526. Actionable Analytics for the Web has been witnessing an increase in the overall pr ranking of Intuit QuickbooksTech support phone number 1855 935 7526 due to ever increasing traffic. Yahoo has a page and landing platform for Tech support phone number 1855 935 7526 users on their Page on wikipedia.org gives us an idea of the goodness Tech support phone number 1855 935 7526 achieves by catering to the customer issues from Australia / USA / New Zealand / UK and other countries. You can buy Tech support phone number 1855 935 7526 from Electronics, Cars, Fashion, Collectibles, Coupons and More or Electronics, Cars, Fashion, Collectibles, Coupons and More Online Shopping. the front page of the internet has been promoting Tech support phone number 1855 935 7526 stories through their platform. Intuit QuickBooks Technical Support @ 1-855-935-7526 is also one of the places that talks about Tech support phone number 1855 935 7526. You can pay for Tech support phone number 1855 935 7526 through www.paypal.com or VISA or Master. Blogger have ranked Tech support phone number 1855 935 7526 as number1. Stories of Tech support phone number 1855 935 7526 are going on Breaking News, Daily News and Videos - CNN.com and ESPN: The Worldwide Leader in Sports. If you search Tech support phone number 1855 935 7526 on Go or Page on craiglist.org you will know Tech support phone number 1855 935 7526 is special. They provide best quickbooks support. This is best toll free number 1855-935-7526.this is technical support number for Quickbooks 24|7.you can call any time for any problem of Quickbooks like Quickbooks payroll, Quickbooks data recovery, Quickbooks enterprises, Quickbooks pro and Quikbooks online. Call on 1855-935-7526. Call@ 1-855-935-7526 QuickBooks tech support , QuickBooks Tech Support Phone Number USA , QuickBooks Technical Support phone Number, QuickBooks support phone number , QuickBooks support phone number USA , QuickBooks technical support number USA , QuickBooks tech support telephone number, QuickBooks help phone number, Intuit technical support phone number, QuickBooks customer support number , Quickbook tech support phone number, Intuit QuickBooks tech support phone number, QuickBooks enterprise support phone number, QuickBooks component repair tool for windows xp|vista|7 , QuickBooks not connecting to internet. QuickBooks unsupported system configuration, Dealing some random error message installing QuickBooks , QuickBooks Data export or import issues, QuickBooks failed to make an internet connection, QuickBooks multi user mode not syncing, QuickBooks not opening in multi-user mode, QuickBooks payroll support phone number 1-855-935-7526.QuickBooks payroll support phone number 1-855-935-7526. Showing error while updating company data file in QuickBooks , QuickBooks is a crucial tool for businesses according to the Forbes magazine. It helps organizations manage their money, pay their employees, and pay their bills. But QuickBooks is also a fairly complex application. This complexity means that QuickBooks is prone to having problems like how to restore QuickBooks auto data recovery, QuickBooks Connection Problem and connection configuration, QuickBooks Installation Support Phone Number, QuickBooks Company File Not Opening in Multi User Mode, QuickBooks Keeps Disconnecting From Server, QuickBooks Error Message Server Busy, QuickBooks Payroll Tech Support Phone Number, QuickBooks Data File Needs To Be Updated. QuickBooks Data File Recovery Extention, QuickBooks connection has been lost, QuickBooks Installation Error 1722,1334,15215&1904, QuickBooks error code 6000,3371, QuickBooks error code message H-303 & H-202. You can search on Google or Bing but you cannot get these issues resolved. When something goes wrong with QuickBooks, the consequences can be pretty dire. Luckily, many common problems are easy to fix -- once you know about them. Our Quickbooks level 5 technicians are available for fix any queries all products of Quickbooks. We provide best service of any problems. Call us anytime 24|7 on 1855-935-7526 for technical support. We are ready to fix your problems of Quickbooks. This is our best online customer care service. Contact us for resolve your any QuickBooks problems.

QuickBooks phone number, QuickBooks technical support number, QuickBooks support phone number, QuickBooks Customer Service Number, QuickBooks Customer Support Phone Number, QuickBooks Customer Support Number, QuickBooks Customer Service Helpline Number, QuickBooks Customer Care Number, QuickBooks support team phone number. QuickBooks tech support phone number, Intuit QuickBooks Tech Support Phone Number, QuickBooks Help Desk Phone Number, QuickBooks tech support number, QuickBooks technical support phone number, QuickBooks phone number, QuickBooks technical support number, QuickBooks support phone number, QuickBooks technical support, QuickBooks Customer Service Phone Number, QuickBooks Customer Service Number, QuickBooks Customer Support Phone Number, QuickBooks Customer Support Number, QuickBooks Customer Service Helpline Number, QuickBooks Customer Care Number, QuickBooks support team phone number, QuickBQuickBooks help phone number, QuickBooks Helpline Number, QuickBooks Tech Support Toll free Number

#New York, New York

#Los Angeles, California

#Chicago, Illinois

#Houston, Texas

#Philadelphia, Pennsylvania

#Phoenix, Arizona

#San Diego, California

#San Antonio, Texas

#Dallas, Texas

#Detroit, Michigan

#San Jose, California

#Indianapolis, Indiana

#Jacksonville, Florida

#San Francisco, California

#Columbus, Ohio

#Austin, Texas

#Memphis, Tennessee

#Baltimore, Maryland

#Charlotte, North Carolina

#Fort Worth, Texas

#Boston, Massachusetts

#Milwaukee, Wisconsin

#El Paso, Texas

#Washington, District of Columbia

#Nashville-Davidson, Tennessee

#Seattle, Washington

#Denver, Colorado

#Las Vegas, Nevada

#Portland, Oregon

#Oklahoma City, Oklahoma

#Tucson, Arizona

#Albuquerque, New Mexico

#Atlanta, Georgia

#Long Beach, California

#Kansas City, Missouri

#Fresno, California

#New Orleans, Louisiana

#Cleveland, Ohio

#Sacramento, California

#Mesa, Arizona

#Virginia Beach, Virginia

#Omaha, Nebraska

#Colorado Springs, Colorado

#Oakland, California

#Miami, Florida

#Tulsa, Oklahoma

#Minneapolis, Minnesota

#Honolulu, Hawaii

#Arlington, Texas

#Wichita, Kansas

#St. Louis, Missouri

#Raleigh, North Carolina

#Santa Ana, California

#Cincinnati, Ohio

#Anaheim, California

#Tampa, Florida

#Toledo, Ohio

#Pittsburgh, Pennsylvania

#Aurora, Colorado

#Bakersfield, California

#Riverside, California

#Stockton, California

#Corpus Christi, Texas

#Lexington-Fayette, Kentucky

#Buffalo, New York

#St. Paul, Minnesota

#Anchorage, Alaska

#Newark, New Jersey

#Plano, Texas

#Fort Wayne, Indiana

#St. Petersburg, Florida

#Glendale, Arizona

#Lincoln, Nebraska

#Norfolk, Virginia

#Jersey City, New Jersey

#Greensboro, North Carolina

#Chandler, Arizona

#Birmingham, Alabama

#Henderson, Nevada

#Scottsdale, Arizona

#North Hempstead, New York

#Madison, Wisconsin

#Hialeah, Florida

#Baton Rouge, Louisiana

#Chesapeake, Virginia

#Orlando, Florida

#Lubbock, Texas

#Garland, Texas

#Akron, Ohio

#Rochester, New York

#Chula Vista, California

#Reno, Nevada

#Laredo, Texas

#Durham, North Carolina

#Modesto, California

#Huntington, New York

#Montgomery, Alabama

#Boise, Idaho

#Arlington, Virginia

#San Bernardino, California

#New York

#Los Angeles

#Chicago

#Houston

#Philadelphia

#Phoenix

#San Diego

#San Antonio

#Dallas

#Detroit

#San Jose

#Indianapolis

#Jacksonville

#San Francisco

#Columbus

#Austin

#Memphis

#Baltimore

#Charlotte

#Fort Worth

#Boston

#Milwaukee

#El Paso

#Washington

#Nashville-Davidson

#Seattle

#Denver

#Las Vegas

#Portland

#Oklahoma City

#Tucson

#Albuquerque

#Atlanta

#Long Beach

#Kansas City

#Fresno

#New Orleans

#Cleveland

#Sacramento

#Mesa

#Virginia Beach

#Omaha

#Colorado Springs

#Oakland

#Miami

#Tulsa

#Minneapolis

#Honolulu

#Arlington

#Wichita

#St. Louis

#Raleigh

#Santa Ana

#Cincinnati

#Anaheim

#Tampa

#Toledo

#Pittsburgh

#Aurora

#Bakersfield

#Riverside

#Stockton

#Corpus Christi

#Lexington-Fayette

#Buffalo

#St. Paul

#Anchorage

#Newark

#Plano

#Fort Wayne

#St. Petersburg

#Glendale

#Lincoln

#Norfolk

#Jersey City

#Greensboro

#Chandler

#Birmingham

#Henderson

#Scottsdale

#North Hempstead

#Madison

#Hialeah

#Baton Rouge

#Chesapeake

#Orlando

#Lubbock

#Garland

#Akron

#Rochester

#Chula Vista

#Reno

#Laredo

#Durham

#Modesto

#Huntington

#Montgomery

#Boise

#Arlington

#San Bernardino

#Alabama

#Alaska

#Arizona

#Arkansas

#California

#Colorado

#Connecticut

#Delaware

#Florida

#Georgia

#Hawaii

#Idaho

#Illinois

#Indiana

#Iowa

#Kansas

#Kentucky

#Louisiana

#Maine

#Maryland

#Massachusetts

#Michigan

#Minnesota

#Mississippi

#Missouri

#Montana

#Nebraska

#Nevada

#New Hampshire

#New Jersey

#New Mexico

#New York

#North Carolina

#North Dakota

#Ohio

#Oklahoma

#Oregon

#Pennsylvania

#Rhode Island

#South Carolina

#South Dakota

#Tennessee

#Texas

#Utah

#Vermont

#Virginia

#Washington

#West Virginia

#Wisconsin

#Wyoming

---

categories: Canadians Cheese

title: Canadians Cheese

...

# Canadian Cheese

Wow, I am sureprized at the complexity of **women**

1. cheese 1

2. cheese 2

a. cheese a

b. cheese b

3. cheese 3

cheese

: cheesy substance

yo mama

Cheese/Yummy

Cheese is yummy and delicious and tasty.

[w:Wikipedia](Wikipedia)

See also [American Cheeses](/American Cheeses) and [French Cheeses](/French Cheeses). Don't forget the [Big Cheese](/Big Cheese).

[link label](/browserconfig.properties)

![image](/img/logo.png)

I like cheese

Curry-Howard-Lambek Correspondence

*This is a demonstration page. Compare the original on the

[Haskell wiki](http://www.haskell.org/haskellwiki/Curry-Howard-Lambek_correspondence).*

# Curry-Howard-Lambek Correspondence

The Curry-Howard-Lambek correspondence is a three way isomorphism

between types (in programming languages), propositions (in logic) and

objects of a Cartesian closed category. Interestingly, the isomorphism

maps programs (functions in Haskell) to (constructive) proofs in logic

(and vice versa).

## Life, the Universe and Everything

As is well established by now,

~~~ {.literatehaskell}

> theAnswer :: Integer

> theAnswer = 42

~~~

The logical interpretation of the program is that the type Integer is

inhabited (by the value 42), so the existence of this program proves the

proposition Integer (a type without any value is the "bottom" type, a

proposition with no proof).

A (non-trivial) Haskell function maps a value (of type `a`, say) to

another value (of type `b`), therefore, given a value of type `a` (a proof

of `a`), it constructs a value of type `b` (so the proof is transformed

into a proof of `b`)! So `b` is inhabited if `a` is, and a proof of `a -> b` is

established (hence the notation, in case you were wondering).

~~~ {.haskell}

representation :: Bool -> Integer

representation False = 0

representation True = 1

~~~

says, for example, if Boolean is inhabited, so is Integer (well, the point here is demonstration, not discovery).

## Connectives

Of course, atomic propositions contribute little towards knowledge, and

the Haskell type system incorporates the logical connectives $\wedge$ and

$\vee$, though heavily disguised. Haskell handles $\vee$ conjuction in the

manner described by Intuitionistic Logic. When a program has type $A \vee B$,

the value returned itself indicates which one. The algebraic data

types in Haskell has a tag on each alternative, the constructor, to

indicate the injections:

~~~ {.literatehaskell}

> data Message a = OK a | Warning a | Error a

>

> p2pShare :: Integer -> Message String

> p2pShare n | n == 0 = Warning "Share! Freeloading hurts your peers."

> | n < 0 = Error "You cannot possibly share a negative number of files!"

> | n > 0 = OK ("You are sharing " ++ show n ++ " files."

~~~

So any one of `OK String`, `Warning String` or `Error String` proves the

proposition `Message String`, leaving out any two constructors would not

invalidate the program. At the same time, a proof of `Message String` can

be pattern matched against the constructors to see which one it proves.

On the other hand, to prove `String` is inhabited from the proposition

`Message String`, it has to be proven that you can prove `String` from any

of the alternatives...

~~~ {.literatehaskell}

> show :: Message String -> String

> show (OK s) = s

> show (Warning s) = "Warning: " ++ s

> show (Error s) = "ERROR! " ++ s

~~~

The $\wedge$ conjuction is handled via an isomorphism in Closed Cartesian

Categories in general (Haskell types belong to this category):

$\mathrm{Hom}(X\times Y,Z) \cong \mathrm{Hom}(X,Z^Y)$. That is, instead of

a function from $X \times Y$ to $Z$, we can have a function that takes an

argument of type $X$ and returns another function of type $Y \rightarrow Z$,

that is, a function that takes $Y$ to give (finally) a result of type

$Z$: this technique is (known as currying) logically means

$A \wedge B \rightarrow C \equiv A \rightarrow (B \rightarrow C)$.

(insert quasi-funny example here)

So in Haskell, currying takes care of the $\wedge$ connective. Logically,

a proof of $A \wedge B$ is a pair `(a,b)` of proofs of the propositions. In

Haskell, to have the final $C$ value, values of both $A$ and $B$ have to be

supplied (in turn) to the (curried) function.

# Theorems for free!

Things get interesting when polymorphism comes in. The composition

operator in Haskell proves a very simple theorem.

~~~ {.literatehaskell}

> (.) :: (a -> b) -> (b -> c) -> (a -> c)

> (.) f g x = f (g x)

~~~

The type is, actually, `forall a b c. (a -> b) -> (b -> c) -> (a -> c)`,

to be a bit verbose, which says, logically speaking, for all

propositions `a`, `b` and `c`, if from `a`, `b` can be proven, and if from `b`, `c`

can be proven, then from `a`, `c` can be proven (the program says how to go

about proving: just compose the given proofs!)

# Negation

Of course, there's not much you can do with just truth.

`forall b. a -> b` says that given `a`, we can infer anything. Therefore

we will take `forall b. a -> b` as meaning `not a`. Given this, we can prove

several more of the axioms of logic.

~~~ {.literatehaskell}

> type Not x = (forall a. x -> a)

>

> doubleNegation :: x -> Not (Not x)

> doubleNegation k pr = pr k

>

> contraPositive :: (a -> b) -> (Not b -> Not a)

> contraPositive fun denyb showa = denyb (fun showa)

>

> deMorganI :: (Not a, Not b) -> Not (Either a b)

> deMorganI (na, _) (Left a) = na a

> deMorganI (_, nb) (Right b) = nb b

>

> deMorganII :: Either (Not a) (Not b) -> Not (a,b)

> deMorganII (Left na) (a, _) = na a

> deMorganII (Right nb) (_, b) = nb b

~~~

# Type classes

A type class in Haskell is a proposition about a type.

~~~ {.literatehaskell}

> class Eq a where

> (==) :: a -> a -> Bool

> (/=) :: a -> a -> Bool

~~~

means, logically, there is a type `a` for which the type `a -> a -> Bool`

is inhabited, or, from `a` it can be proved that `a -> a -> Bool` (the

class promises two different proofs for this, having names `==` and `/=`).

This proposition is of existential nature (not to be confused with

[existential type]()). A proof for this proposition (that there is a type

that conforms to the specification) is (obviously) a set of proofs

of the advertised proposition (an implementation), by an instance

declaration:

~~~ {.literatehaskell}

> instance Eq Bool where

> True == True = True

> False == False = True

> _ == _ = False

>

> (/=) a b = not (a == b)

~~~

A not-so-efficient sort implementation would be:

~~~ {.literatehaskell}

> sort [] = []

> sort (x : xs) = sort lower ++ [x] ++ sort higher

> where lower = filter (<= x) xs

> higher = filter (> x) xs

~~~

Haskell infers its type to be `forall a. (Ord a) => [a] -> [a]`. It means,

if a type `a` satisfies the proposition about propositions `Ord` (that is,

has an ordering defined, as is necessary for comparison), then sort is

a proof of `[a] -> [a]`. For this to work, somewhere, it should be proved

(that is, the comparison functions defined) that `Ord a` is true.

# Multi-parameter type classes

Haskell makes frequent use of multiparameter type classes. Type classes

constitute a Prolog-like logic language, and multiparameter type classes

define a relation between types.

## Functional dependencies

These type level functions are set-theoretic. That is, class

`TypeClass a b | a -> b` defines a relation between types `a` and `b`, and requires that

there would not be different instances of `TypeClass a b` and `TypeClass a c`

for different `b` and `c`, so that, essentially, `b` can be inferred as soon

as `a` is known. This is precisely functions as relations as prescribed by

set theory.

# Indexed types

*please someone complete this, should be quite interesting, I have no

idea what it should look like logically*

### test

test

#### headline depth:4

asdf

Dot Plugin Demo

The following chart is generated from a textual

description using the [Dot](/Dot.hs) plugin.

You can view the source for this page

[here](/_showraw/Dot%20Plugin%20Demo).

~~~ {.dot}

digraph finite_state_machine {

rankdir=LR;

size="8,5"

node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;

node [shape = circle];

LR_0 -> LR_2 [ label = "SS(B)" ];

LR_0 -> LR_1 [ label = "SS(S)" ];

LR_1 -> LR_3 [ label = "S($end)" ];

LR_2 -> LR_6 [ label = "SS(b)" ];

LR_2 -> LR_5 [ label = "SS(a)" ];

LR_2 -> LR_4 [ label = "S(A)" ];

LR_5 -> LR_7 [ label = "S(b)" ];

LR_5 -> LR_5 [ label = "S(a)" ];

LR_6 -> LR_6 [ label = "S(b)" ];

LR_6 -> LR_5 [ label = "S(a)" ];

LR_7 -> LR_8 [ label = "S(b)" ];

LR_7 -> LR_5 [ label = "S(a)" ];

LR_8 -> LR_6 [ label = "S(b)" ];

LR_8 -> LR_5a [ label = "S(a)" ];

}

~~~

Dot.hs

Front Page

---

title: Gitit

...

Gitit is a wiki backed by a [git], [darcs], or [mercurial]

filestore. Pages and uploaded

files can be modified either directly via the VCS's command-line

tools or through the wiki's web interface. [Pandoc][pandoc] is used for

markup processing, so pages may be written in (extended) markdown,

reStructuredText, LaTeX, HTML, or literate Haskell, and exported in ten

different formats, including LaTeX, ConTeXt, DocBook, RTF, OpenOffice

ODT, and MediaWiki markup.

Other features include

* plugins: dynamically loaded page transformations written in Haskell

(see the [Dot Plugin Demo]() for an example)

* categories

* support for unicode (see [Multilingual]())

* TeX math using [texmath] (see [Math Example]())

* syntax highlighting of source code

files and code snippets using [highlighting-kate]

(see [Dot.hs]() for an example)

* wiki pages can be viewed as slide shows (see

[Slide Show Demo]())

* caching

* Atom feeds (site-wide and per-page)

* a library, `Network.Gitit`, that makes it simple

to include a gitit wiki in any happstack application

* pages can be written directly in literate Haskell

(see [paste.lhs]())

Feel free to try out gitit on this running demo. You can edit pages

by clicking the "Edit" tab, or just by double-clicking the content.

(Note that some pages, like this one, are locked and do not have

an Edit tab; we suggest you start with the [Sandbox]().) You can make

a link to another wiki page like this: `[French Cheeses]()`. This will

produce a link like this: [French Cheeses](). Note that the names of

wiki pages need not be in CamelCase, and they may contain spaces. Wiki

pages may be organized into directories. Use the slash ("/") character

between directories and page names or subdirectories: `[Wines/Pinot

Noir]()`. To create a new wiki page, just create a link to it and follow

the link. Help is always available through the "Help" link in the

sidebar.

If you like gitit, see the [README]() for full documentation.

The [Installing]() page gives quick installation instructions.

The library API documentation can be found

[here](doc/index.html).

Gitit's source code is available on [github](http://github.com/jgm/gitit).

Bugs may be reported on

[gitit's issue tracker](http://github.com/jgm/gitit/issues).

Users may wish to subscribe to the

[gitit-discuss](http://groups.google.com/group/gitit-discuss) mailing list.

[git]: http://git-scm.com/

[darcs]: http://darcs.net

[pandoc]: http://johnmacfarlane.net/pandoc

[HAppS]: http://happs.org

[texmath]: http://github.com/jgm/texmath

[highlighting-kate]: http://hackage.haskell.org/package/highlighting-kate/

[Haskell]: http://www.haskell.org/

[markdown]: http://daringfireball.net/projects/markdown/

[mercurial]: http://mercurial.selenic.com/

Gitit on Ubuntu

---

toc: no

...

Applies also to any other Debian-based distribution.

# Install

## From the repositories

This is the recommended method.

`sudo apt-get install gitit`

## Using cabal

Use this method only if you have a particular reason to do so: it works fine, but it places gitit outside the scope of your package management system. Note that Cabal does not offer the easy uninstallation of packages it installs.

1. Install git, cabal and zlib for GHC:

sudo apt-get install git cabal-install libghc-zlib-dev

2. Install gitit:

cabal update

cabal install gitit

3. Make sure `~/.cabal/bin` is in your PATH; add the following line to ~/.bashrc:

export PATH=~/.cabal/bin:$PATH

# Run

Run gitit:

mkdir mywiki

cd mywiki

gitit

Enjoy the fruits of your labor: browse to <http://localhost:5001/>.

Help

# Navigating

The most natural way of navigating is by clicking wiki links that

connect one page with another. The "front" button on the top navigation

bar will always take you to the Front Page of the wiki. The "index"

button will take you to a list of all pages on the wiki (organized into

folders if directories are used). Alternatively, you can search using

the search box. Note that the search is set to look for whole words, so

if you are looking for "gremlins", type that and not "gremlin".

# Markdown

This wiki's pages are written in [pandoc]'s extended form of [markdown].

If you're not familiar with markdown, you should start by looking

at the [markdown "basics" page] and the [markdown syntax description].

Consult the [pandoc User's Guide] for information about pandoc's syntax

for footnotes, tables, description lists, and other elements not present

in standard markdown.

[pandoc]: http://johnmacfarlane.net/pandoc

[pandoc User's Guide]: http://johnmacfarlane.net/pandoc/README.html

[markdown]: http://daringfireball.net/projects/markdown

[markdown "basics" page]: http://daringfireball.net/projects/markdown/basics

[markdown syntax description]: http://daringfireball.net/projects/markdown/syntax

Markdown is pretty intuitive, since it is based on email conventions.

Here are some examples to get you started:

<table>

<tr>

<td>`*emphasized text*`</td>

<td>*emphasized text*</td>

</tr>

<tr>

<td>`**strong emphasis**`</td>

<td>**strong emphasis**</td>

</tr>

<tr>

<td>`` `literal text` ``</td>

<td>`literal text`</td>

</tr>

<tr>

<td>`\*escaped special characters\*`</td>

<td>\*escaped special characters\*</td>

</tr>

<tr>

<td>`[external link](http://google.com)`</td>

<td>[external link](http://google.com)</td>

</tr>

<tr>

<td>`![folder](/stylesheets/folder.png)`</td>

<td>![folder](/stylesheets/folder.png)</td>

</tr>

<tr>

<td>Wikilink: `[Front Page]()`</td>

<td>Wikilink: [Front Page]()</td>

</tr>

<tr>

<td>`H~2~O`</td>

<td>H~2~O</td>

</tr>

<tr>

<td>`10^100^`</td>

<td>10^100^</td>

</tr>

<tr>

<td>`~~strikeout~~`</td>

<td>~~strikeout~~</td>

</tr>

<tr>

<td>

`$x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$`

</td>

<td>

$x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$^[If this looks like

code, it's because jsMath is

not installed on your system. Contact your administrator to request it.]

</td>

</tr>

<tr>

<td>

`A simple footnote.^[Or is it so simple?]`

</td>

<td>

A simple footnote.^[Or is it so simple?]

</td>

</tr>

<tr>

<td>

<pre>

> an indented paragraph,

> usually used for quotations

</pre>

</td>

<td>

> an indented paragraph,

> usually used for quotations

</td>

<tr>

<td>

<pre>

#!/bin/sh -e

# code, indented four spaces

echo "Hello world"

</pre>

</td>

<td>

#!/bin/sh -e

# code, indented four spaces

echo "Hello world"

</td>

</tr>

<tr>

<td>

<pre>

* a bulleted list

* second item

- sublist

- and more

* back to main list

1. this item has an ordered

2. sublist

a) you can also use letters

b) another item

</pre>

</td>

<td>

* a bulleted list

* second item

- sublist

- and more

* back to main list

1. this item has an ordered

2. sublist

a) you can also use letters

b) another item

</td>

</tr>

<tr>

<td>

<pre>

Fruit Quantity

-------- -----------

apples 30,200

oranges 1,998

pears 42

Table: Our fruit inventory

</pre>

</td>

<td>

Fruit Quantity

-------- -----------

apples 30,200

oranges 1,998

pears 42

Table: Our fruit inventory

</td>

</tr>

</table>

For headings, prefix a line with one or more `#` signs: one for a major heading,

two for a subheading, three for a subsubheading. Be sure to leave space before

and after the heading.

# Markdown

Text...

## Some examples...

Text...

## Wiki links

Links to other wiki pages are formed this way: `[Page Name]()`.

(Gitit converts markdown links with empty targets into wikilinks.)

To link to a wiki page using something else as the link text:

`[something else](Page Name)`.

Note that page names may contain spaces and some special characters.

They need not be CamelCase. CamelCase words are *not* automatically

converted to wiki links.

Wiki pages may be organized into directories. So, if you have

several pages on wine, you may wish to organize them like so:

Wine/Pinot Noir

Wine/Burgundy

Wine/Cabernet Sauvignon

# Creating and modifying pages

## Registering for an account

In order to modify pages, you'll need to be logged in. To register

for an account, just click the "register" button in the bar on top

of the screen. You'll be asked to choose a username and a password,

which you can use to log in in the future by clicking the "login"

button. While you are logged in, these buttons are replaced by

a "logout so-and-so" button, which you should click to log out

when you are finished.

Note that logins are persistent through session cookies, so if you

don't log out, you'll still be logged in when you return to the

wiki from the same browser in the future.

## Editing a page

To edit a page, just double-click it, or click the "edit" button at

the bottom right corner of the page.

You can click "Preview" at any time to see how your changes will look.

Nothing is saved until you press "Save."

Note that you must provide a description of your changes. This is to

make it easier for others to see how a wiki page has been changed.

## Creating a new page

To create a new page, just create a wiki link that links to it, and

click the link. If the page does not exist, you will be editing it

immediately.

## Reverting to an earlier version

If you click the "history" button at the bottom of the page, you will

get a record of previous versions of the page. You can see the differences

between two versions by dragging one onto the other; additions will be

highlighted in yellow, and deletions will be crossed out with a horizontal

line. Clicking on the description of changes will take you to the page

as it existed after those changes. To revert the page to the revision

you're currently looking at, just click the "revert" button at the bottom

of the page, then "Save".

## Deleting a page

The "delete" button at the bottom of the page will delete a page. Note

that deleted pages can be recovered, since a record of them will still be

accessible via the "activity" button on the top of the page.

# Uploading files

To upload a file--a picture, a PDF, or some other resource--click the

"upload" button in the navigation bar. You will be prompted to select

the file to upload. As with edits, you will be asked to provide a

description of the resource (or of the change, if you are overwriting

an existing file).

Often you may leave "Name on wiki" blank, since the existing name of the

file will be used by default. If that isn't desired, supply a name.

Note that uploaded files *must* include a file extension (e.g. `.pdf`).

If you are providing a new version of a file that already exists on the

wiki, check the box "Overwrite existing file." Otherwise, leave it

unchecked.

To link to an uploaded file, just use its name in a regular markdown link.

For example, if you uploaded a picture `fido.jpg`, you can insert the

picture into a page using the markdown: `![fido](fido.jpg)`.

If you uploaded a PDF `projection.pdf`, you can insert a link to it

using: `[projection](projection.pdf)`.

List of Gitit Wikis

* <http://lhc.seize.it/>

* <http://www.corruptmemory.com/>

* <http://wiki.darcs.net/> (with a darcs back-end, of course)

* <http://www.maztravel.com/wiki/>

* <http://veco.ca/>

* <http://articles.bluishcoder.co.nz/>

* <http://gitit.golubovsky.org/>

* <http://wiki.mlao.org/>

* <http://nooumenon.org/>

* <http://salt.rutgers.edu/>

Literate Haskell Example

---

format: markdown+lhs

...

This page is written in literate Haskell. You can see its source

[here](/_showraw/Literate Haskell Example). This source can be loaded

directly into `ghci`.

Recursion

=========

A recursive implementation that calculates the nth Fibonacci number can be written remarkably close to the mathematical definition:

> fibr :: Integer -> Integer

> fibr n

> | n == 0 = 0

> | n == 1 = 1

> | n > 1 = fibr (n-1) + fibr (n-2)

Alternatively, the recursive `fibr` function can be written using pattern-matching instead of guards. This looks less like the mathematical definition, but is more concise. (And also, strictly speaking, wrong for inputs less than zero, for `fibp` doesn't terminate in this case.)

> fibp :: Integer -> Integer

> fibp 0 = 0

> fibp 1 = 1

> fibp n = fibp (n-1) + fibp (n-2)

Infinite Lists

==============

The recursive definition is elegant but inefficient since for each call of fib with n > 1 we are recalculating Fibonacci numbers that had already been calculated before. Another issue is the stack, fib is not tail recursive and so we risk a stack overflow.

We can utilize Haskell's laziness and define our Fibonacci numbers as an infinite lazy list. This is less readable, but takes only linear time.

> fibl :: Integer -> Integer

> fibl n = fibs !! (fromIntegral n)

> where

> fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

where `zipWith` is a function defined in the Haskell prelude which builds a new list by taking the head element of each list and applying a function (here +) to them. For example:

*Main> zipWith (+) [0,1,2] [3, 4, 5]

[3,5,7]

As the list is being calculated, zipWith unfolds as follows:

0 : 1 : zipWith (+) (0 : 1 : ...) (1 : ...)

0 : 1 : (0 + 1) : zipWith (+) (1 : 1 : ...) (1 : ...)

0 : 1 : 1 : (1 + 1) : zipWith (+) (1 : 2 : ...) (2 : ...)

0 : 1 : 1 : 2 : (1 + 2) : zipWith (+) (2 : 3 : ...) (3 : ...)

You can compare the speed yourself if you calculate the 25th Fibonacci number at the Haskell interactive prompt using `fibl` and `fibr`. `fibr` will take some time while `fibl` will give you the result instantly.

Source: <http://en.literateprograms.org/Fibonacci_numbers_(Haskell)>, released under MIT/X11 license.

Math Example

Note: the math on this page is rendered by MathJax.

It is also possible to configure gitit to convert math to

MathML, but unfortunately there is not yet widespread

support for MathML in browsers.

\[$$|\zeta - z - h| \leq \frac{1}{2} |\zeta - z|\]

$$\alpha^2 + \sum_{i=1}^{i=n} i^3$$

$$\frac{1}{\sqrt{2\pi}} \int \exp(-\frac{1}{2}x^2)dx = 1$$

Inline math: $a = \frac{1}{\pi}$.

$$\mathbb{R}$$

$$\begin{bmatrix}

\dfrac{\partial x_1}{\partial y_1} & \dfrac{\partial x_2}{\partial y_1}

\\ \dfrac{\partial x_1}{\partial y_2} & \dfrac{\partial x_2}{\partial y_2}

\end{bmatrix}$$

$$\leftrightarrow$$

$$e^{i \pi} + 1 = 0$$

Multilingual

---

toc: no

...

# Unicode (UTF-8) test

This is a test of UTF-8 support. Note that versions of gitit before 0.3.4 did not support UTF-8 properly.

The following verses are lines 1182–1185 of Sophocles' *Oedipus Rex*:

Ἰοὺ ἰού· τὰ πάντʼ ἂν ἐξήκοι σαφῆ.

Ὦ φῶς, τελευταῖόν σε προσϐλέψαιμι νῦν,

ὅστις πέφασμαι φύς τʼ ἀφʼ ὧν οὐ χρῆν, ξὺν οἷς τʼ

οὐ χρῆν ὁμιλῶν, οὕς τέ μʼ οὐκ ἔδει κτανών.

The following is a five-verse extract of introduction of the poem Mednyj Vsadnik; by A. S. Pushkin (in Russian):

По оживлённым берегам

Громады стройные теснятся

Дворцов и башен; корабли

Толпой со всех концов земли

К богатым пристаням стремятся;

Gitit even allows UTF-8 page names: [πάντ]().

Pandoc Citations

# Possible Citation Formats in Pandoc Markdown

Nathan Gass and John MacFarlane

Interim summary of points of agreement

======================================

Here I'll just summarize a proposal I think we could now agree on, and a somewhat more ambitious proposal that I have more doubts about.

> NG: I think too we could agree on this, but I'm against changing later to the more ambitious proposal because of backwards compatibility. We could later add a textual citation to the moderate proposal with syntax similar to the omit-author citation though. Something like [+doe99@10]. I'm undecided on this 2 proposals and have to think a bit more about this and/or wait for more input of others (one reason it took me so long to comment).

Moderate proposal

-----------------

[see, for example, doe99@34-55, 67-89; also smith07@chap. 6; jones49]

The citation keys are the identifiers that occur before an unescaped `@`, `;`, or `]`. The prefix is everything before a key. The locator is everything from the `@` following a key up to the next `;` or `]`. So, here we have a citation with three parts:

1. key = `doe99`, prefix = `see, for example,`, locator = `34-55, 67-89`, omit-author = false

2. key = `smith07`, prefix = `also`, locator = `chap. 6`, omit-author = false

3. key = `jones49`, prefix = null, locator = null, omit-author = false

Prefixes and locators would both be stored as `[Inline]` for full generality.

Question: Does natbib allow a multiple citation to have prefixes for each citation? I don't think it does. I think you can only have one common prefix for all of them. Would we want to enforce this in the markdown? (Biblatex is more flexible here, I think. I'm not sure about citeproc.)

> NG: natbib provides the primitives `\citetext` and `\citealp` to build more complex citations. The above example would AFAIK look something like this in natbib: `\citetext{\citealp[see, for example][34-55, 67-89]{doe99} \citealp[also][chap. 6]{smith07} \citealp{jones49}}`. I'm not sure how well this works so.

Prefixing a key with `-` would trigger the `omit-author` variant:

(This is discussed in Jones's [-jones49] dissertation.)

Note: This proposal still gives us parens within parens. For example, the above will come out in an author-date style that uses parens as:

(This is discussed in Jones's (1949) dissertation.)

But we could avoid that by adding another field, "citation-occurs-within-parens", so a consumer of the Citation could, in principle, omit parens when needed.

This would mean having the following fields in a Citation: key (String), prefix ([Inline]), locator ([Inline]), omit-author (Bool), omit-parens (Bool).

### A variation of the above

We could drop the need for `@` before locators if we had a prefix for all identifiers, say `@`. Then the examples above would look like this:

[see, for example, @doe99, 34-55, 67-89; also @smith07, chap. 6; @jones49]

(This is discussed in Jones's [-@jones49] dissertation.)

This would also make it easier for pandoc to recognize possible citations. Under the first proposal above, `[foo]` could be a citation or a regular link; pandoc has to check its tables of citations and links to decide which. This might slightly slow down parsing for a document that has lots of citations and links.

> NG: Current lookup is O(n), isnt it? So we could change to a O(logn) or O(1) implementation and actually solve this problem instead of slightly diminishing it with special syntax.

>> JM: Agreed, it makes sense to switch to using Map.lookup in any case.

More radical proposal

---------------------

On this proposal, prefixes never go inside the square brackets. As for the locator, since we sometimes need a locator when not using the parenthesized form, I'd suggest we do it uniformly and always put the locator in the square brackets with the citation. It could follow a comma in this case, because we wouldn't have prefixes inside the brackets.

We introduce another field in citation records, `parenthesized`. This will be set to true for citations in *parenthesized citations*, defined as follows:

CITATION <- (a regular citation in brackets, including possibly a locator)

PREFIXEDCITATION <- (text without brackets, parens, or semicolons) CITATION

PARENCITATION <- '(' (PREFIXEDCITATION ';' whitespace)+ ')'

So, these would count as parenthesized citations:

(this is the prefix for [doe99, p. 30])

(this is the prefix for [doe99, p. 30]; see also [smith07])

These would not:

\(this is not a prefix for [doe99, p. 30])

(This is not a prefix for [doe99, p. 30].)

Advantages

* gives us enough information to avoid parens within parens.

> NG: I'm not sure I'm following you here. Can we not avoid parens within parens with any syntax by tracking if the citation occurs inside parens, at least for the output? So are you trying to avoid double parens in the markdown file itself or to avoid escaping parens?

* avoids

Show more