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