Left Behind and Haskell: Difference between pages

(Difference between pages)
Content deleted Content added
m +pt
 
More complex examples: coherence with previous section
 
Line 1:
[[Image:Haskell Logo.jpg|frame|Haskell logo]]
'''Left Behind''' is a series of [[novels]] by [[Tim LaHaye]] and [[Jerry B. Jenkins]], dealing with Christian [[dispensationalism|dispensationalist]] [[End Times]]: pretribulation, premillennial, [[Christianity|Christian]] [[eschatology]].
 
'''Haskell''' is a standardized [[purely functional|pure]] [[functional_programming|functional]] [[programming language]] with [[non-strict programming language|non-strict semantics]]. Named after the logician [[Haskell Curry]], it was created by a committee formed in [[1987]] for the express purpose of defining such a language. The direct predecessor of Haskell was [[Miranda programming language|Miranda]] from [[1985]].
LaHaye and Jenkins cite the influence of [[Russell S. Doughten]], an [[Iowa]]n film-maker who directed a series of four low-budget feature-length films in the [[1970s]] and [[1980s]] about the Rapture and Second Coming. The films' popularity among Christian fundamentalists have led to increased study and speculation as to the events described in the Book of [[Revelation]].
The latest semi-official language standard is '''Haskell 98''', intended to specify a minimal, portable version of the language for teaching and as a base for future extensions.
The language continues to evolve rapidly, with [[Hugs]] and [[Glasgow Haskell Compiler|GHC]] (see below) representing the current [[de facto#De facto standards|''de facto'' standard]].
 
Characterizing syntax features in Haskell include [[pattern matching]], [[currying]], [[list comprehension]]s, [[guard (computing)|guard]]s, and definable [[operator (programming)|operator]]s. The language also supports [[recursion|recursive]] functions and [[algebraic data type]]s, as well as [[lazy evaluation]]. Unique concepts include [[Monads_in_functional_programming|monad]]s, and [[type class]]es.
{{spoiler}}
The combination of such features can make [[function (programming)|functions]] which would be difficult to write in a procedural programming language almost trivial to implement in Haskell.
 
The language is, as of [[as of 2002|2002]], the [[Lazy_evaluation|lazy]] [[functional programming language|functional language]] on which the most research is being performed. Several variants have been developed: parallelizable versions from [[Massachusetts Institute of Technology|MIT]] and [[Glasgow University|Glasgow]], both called Parallel Haskell; more parallel and distributed versions called Distributed Haskell (formerly Goffin) and [[Eden_programming_language|Eden]]; a [[speculative execution|speculatively evaluating]] version called Eager Haskell and several [[object orientation|object oriented]] versions: Haskell++, [[O'Haskell]] and [[Mondrian programming language|Mondrian]].
The books deal with the rise of the [[Antichrist]]: a [[Romania]]n named Nicolae Carpathia, whose political rise leads him from membership in the Romanian [[Parliament]] to the [[President of Romania|Presidency of Romania]], and on to the position of [[Secretary-General]] of the [[United Nations]]. Under his rule, all the countries of the world merge into a single political entity under United Nations administration. Armies are disbanded, and an era of [[world peace]] established. All [[media]] are consolidated under the "Global Community Network" and religions are merged into one faith. Finally, Carpathia is proclaimed "Potentate of the Global Community," and becomes revered as a [[God]].
 
Although Haskell has a comparatively small user community, its strengths have been well applied to a few projects. [[Autrijus Tang]]'s [[Pugs]] is an implementation for the forthcoming Perl 6 language with an interpreter and compilers that proved useful already after just a few months of its writing. [[DARCS]] is a revision control system, with several innovative features.
Throughout the series, Carpathia and the world at large become increasely antagonistic toward any group that does not follow the newly established [[religion]] of "Carpathianism". The world also experiences many cataclysmic judgements sent by [[God]].
 
There is also a Haskell-like language that offers a new method of support for [[GUI]] development called [[Clean programming language|Concurrent Clean]]. Its biggest deviation from Haskell is in the use of [[uniqueness type]]s for input as opposed to [[Monads in functional programming|monads]].
Carpathia's efforts are resisted by a group of people who call themselves the "Tribulation Force", centered around a church in [[Chicago]].
 
== Examples ==
The 12 books in the series are: ''Left Behind'', ''Tribulation Force'', ''Nicolae'', ''Soul Harvest'', ''Apollyon'', ''Assassins'', ''The Indwelling'', ''The Mark'', ''Desecration'', ''The Remnant'', ''Armageddon'' and ''Glorious Appearing''. There are also [[graphic novel]]s, audio drama tapes, CDs, and a ''Left Behind'' series for children. A dramatic audio series based on the these 12 titles has also been produced for broadcast on Christian radio.
 
=== Anatomy of a Haskell function ===
Two spin off book series have been started. The series involve different characters, but cover the same time frame as the original series. One is called '''End of State''' and the other is '''Apocalypse Dawn'''.
 
The [[Hello world program|"Hello World"]] of functional languages is the [[factorial]] function. Expressed as pure Haskell:
==Response==
 
fac :: Integer -> Integer
The books have sold very well in the [[United States]], many topping the [[New York Times]] list of bestsellers. In other areas, such as continental [[Europe]]--where [[dispensationalism]] is largely non-existent--the books have been far less successful.
fac 0 = 1
fac n | n>0 = n * fac (n-1)
 
This describes the factorial as a recursive function, with a single terminating base case. It is similar to the descriptions of factorials found in mathematics textbooks. Much of Haskell code is similar to mathematics in facility and syntax.
In an article enquiring into the series' popularity, [[Salon.com|Salon magazine]] writer [[Michelle Goldberg]] described what she believed was one of the series' attractions [http://www.salon.com/books/feature/2002/07/29/left_behind/]:
 
The first line of the factorial function shown is optional, and describes the ''types'' of this function. It can be read as ''the function fac'' (fac) ''has type'' (::) ''from integer to integer'' (Integer -> Integer). That is, it takes an integer as an argument, and returns another integer.
:''On one level, the attraction of the Left Behind books isn't that much different from that of, say, [[Tom Clancy]] or [[Stephen King]]. The [[plot]]ting is brisk and the characterizations [[Manichean]].''
 
The second line relies on [[pattern matching]], an important part of Haskell programming. Note that parameters of a function are not in parentheses but separated by spaces. When the function's argument is 0 (zero) it will return the integer 1 (one). For all other cases the third line is tried. This is the [[recursion]], and executes the function again until the base case is reached. A [[guard (computing)|guard]] protects the third line from negative arguments that would run down unterminated.
However, she considered the books to be an attack on [[Judaism]] and [[liberalism|liberal]] [[secularism]], and pointed out that the near-future "[[end times]]" the books are set in seem to reflect the actual [[worldview]] of millions of Americans, including many prominent conservative leaders.
 
The "Prelude" is a number of small functions analogous to C's standard library. Using the Prelude and writing in the "point free" (insert classic Haskell joke here) style of unspecified arguments, it becomes:
See also: [[End times]], [[Rapture]]
 
fac = product . enumFromTo 1
==External links==
*[http://www.leftbehind.com Official website]
*[http://www.deixados.tk Brazil fan page]
*[http://www.salon.com/books/feature/2002/07/29/left_behind/ '''Fundamentally unsound''': "''Left Behind'', the bestselling series of paranoid, pro-Israel end-time thrillers, may sound kooky, but America's right-wing leaders really believe this stuff."]
* [http://www.nytimes.com/2004/07/17/opinion/17KRIS.html?ex=1247803200&en=b9eee1a2743a902b&ei=5090&partner=rssuserland The New York Times > Opinion > Op-Ed Columnist: Jesus and Jihad], ''The New York Times,'' July 17, 2004
* [http://www.nytimes.com/2004/11/24/opinion/24kristof.html?ex=1259038800&en=c982a8d18d38c2c4&ei=5090&partner=rssuserland The New York Times > Opinion > Op-Ed Columnist: Apocalypse (Almost) Now], ''The New York Times,'' November 24, 2004
 
The above is close to mathematical definitions such as ''f = g <small>o</small> h'' (see [[function composition]]), and indeed, it's ''not'' an assignment of a value to a variable.
==Secondary literature==
 
*Bruce David Forbes and Jeanne Halgren Kilde (eds.), ''Rapture, Revelation, and the End Times: Exploring the Left Behind Series''. New York: Palgrave Macmillan, 2004. ISBN 1403965250
=== More complex examples ===
[[pt:Deixados Para Trás]]
 
[[Category:Christian eschatology]]
A simple [[RPN]] calculator:
[[Category:Christian fundamentalism]]
 
[[Category:Series of books]]
calc = foldl f [] . words
where
f (x:y:zs) "+" = y+x:zs
f (x:y:zs) "-" = y-x:zs
f (x:y:zs) "*" = y*x:zs
f (x:y:zs) "/" = y/x:zs
f xs y = (read y :: Float):xs
 
A function which returns a stream of the [[Fibonacci numbers]] in linear time:
 
fibs = 0 : 1 : (zipWith (+) fibs (tail fibs))
 
The same function, presented with GHC's [[parallel list comprehension]] syntax:
 
fibs = 0 : 1 : [ a+b | a <- fibs | b <- tail fibs ]
 
The earlier factorial function, this time using a sequence of functions:
 
fac n = (foldl (.) id [\x -> x*k | k <- [1..n]]) 1
 
A remarkably concise function that returns the list of [[Hamming number]]s in order:
 
hamming = 1 : map (*2) hamming # map (*3) hamming # map (*5) hamming
where xxs@(x:xs) # yys@(y:ys)
| x==y = x : xs#ys
| x<y = x : xs#yys
| x>y = y : xxs#ys
 
== Implementations ==
The following all comply fully, or very nearly, with the Haskell 98 standard, and are distributed under [[open source]] licences. There are currently no commercial Haskell implementations.
* '''''[[Hugs]]''''' ([http://www.haskell.org/hugs/]) is a [[bytecode]] interpreter. It offers fast compilation of programs and reasonable execution speed. It also comes with a simple graphics library. Hugs is good for people learning the basics of Haskell, but is by no means a "toy" implementation. It is the most portable and lightweight of the Haskell implementations.
* '''''[[Glasgow Haskell Compiler|Glasgow Haskell Compiler]]''''' ([http://www.haskell.org/ghc/]). The Glasgow Haskell Compiler compiles to native code on a number of different architectures, and can also compile to C. GHC is probably the most popular Haskell compiler, and there are quite a few useful libraries (e.g. bindings to [[OpenGL]]) that will only work with GHC.
* '''''nhc98''''' ([http://www.cs.york.ac.uk/fp/nhc98/]) is another bytecode compiler, but the bytecode runs significantly faster than with Hugs. Nhc98 focuses on minimising memory usage, and is a particularly good choice for older, slower machines.
* '''''Jhc''''' ([http://repetae.net/john/computer/jhc/]) a haskell compiler emphasising speed and efficiency of generated programs as well as exploration of new program transformations.
* '''''Gofer''''' An educational version of Haskell, Gofer was developed by Mark Jones. It was supplanted by HUGS.
* '''''HBC''''' ([http://www.cs.chalmers.se/~augustss/hbc/hbc.html]) is another native-code Haskell compiler. It hasn't been actively developed for some time, but is still usable.
*'''''Helium''''' ([http://www.cs.uu.nl/helium/]) is a newer dialect of Haskell. The focus is on making it easy to learn. It currently lacks typeclasses, making it incompatible with many Haskell programs.
 
== Extensions ==
*[[O'Haskell]] is an extension of Haskell adding [[object-oriented programming|object-orientation]] and [[concurrent programming]] support.
 
== External links ==
* [http://www.haskell.org The Haskell Home Page]
* [http://www.haskell.org/hawiki/ The Haskell Wiki]
* [http://www.haskell.org/tutorial/ A Gentle Introduction to Haskell 98] ([http://www.haskell.org/tutorial/haskell-98-tutorial.pdf pdf] format)
* [http://haskell.org/papers/NSWC/jfp.ps Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity]
* [http://www.willamette.edu/~fruehr/haskell/evolution.html The Evolution of a Haskell Programmer] - a slightly humorous overview of different programming styles available in Haskell
* [http://haskell.readscheme.org An Online Bibliography of Haskell Research]
* [http://www.haskell.org/humor/press.html Haskell Humor]
* [http://www.research.microsoft.com/~simonpj/papers/haskell-retrospective Wearing the hair shirt: a retrospective on Haskell]. Simon Peyton Jones, invited talk at POPL 2003.
 
{{Major programming languages small}}
 
[[Category:Haskell dialects|*]]
[[Category:Programming languages]]
[[Category:Functional languages]]
[[Category:Declarative programming languages]]
 
[[cs:Haskell]]
[[de:Haskell (Programmiersprache)]]
[[es:Haskell]]
[[eo:Haskell]]
[[fr:Haskell]]
[[it:Haskell]]
[[nl:Haskell]]
[[ja:Haskell]]
[[pl:Haskell]]
[[pt:Haskell (linguagem de programação)]]
[[ru:Haskell]]
[[sk:Haskell (programovací jazyk)]]
[[sv:Haskell]]
[[zh:Haskell]]