fay 0.9.1.0 → 0.9.2.0
raw patch · 110 files changed
+5589/−1598 lines, 110 filesdep +optparse-applicativedep +splitdep −optionsdep ~blaze-htmlPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: optparse-applicative, split
Dependencies removed: options
Dependency ranges changed: blaze-html
API changes (from Hackage documentation)
- Language.Fay.Types: JsSequence :: [JsExp] -> JsExp
- Language.Fay.Types: configAutorun :: CompileConfig -> Bool
- Language.Fay.Types: instance Data CompileError
- Language.Fay.Types: instance Eq CompileError
- Language.Fay.Types: instance Eq FundamentalType
- Language.Fay.Types: instance Exception CompileError
- Language.Fay.Types: instance Show CompileConfig
- Language.Fay.Types: instance Show CompileState
- Language.Fay.Types: instance Typeable CompileError
+ Language.Fay.Compiler: compileFromToReturningStatus :: CompileConfig -> FilePath -> FilePath -> IO (Either CompileError ())
+ Language.Fay.FFI: instance Foreign Int
+ Language.Fay.Prelude: data Int :: *
+ Language.Fay.Prelude: fromIntegral :: Int -> Double
+ Language.Fay.Prelude: otherwise :: Bool
+ Language.Fay.Prelude: reverse :: [a] -> [a]
+ Language.Fay.Types: IntType :: FundamentalType
+ Language.Fay.Types: JsMappedVar :: SrcLoc -> JsName -> JsExp -> JsStmt
+ Language.Fay.Types: PrintState :: Int -> Int -> [(SrcLoc, SrcLoc)] -> Int -> [String] -> PrintState
+ Language.Fay.Types: Printer :: State PrintState a -> Printer a
+ Language.Fay.Types: configFilePath :: CompileConfig -> Maybe FilePath
+ Language.Fay.Types: configLibrary :: CompileConfig -> Bool
+ Language.Fay.Types: configTypecheck :: CompileConfig -> Bool
+ Language.Fay.Types: configWall :: CompileConfig -> Bool
+ Language.Fay.Types: configWarn :: CompileConfig -> Bool
+ Language.Fay.Types: data PrintState
+ Language.Fay.Types: instance Default PrintState
+ Language.Fay.Types: instance Functor Printer
+ Language.Fay.Types: instance Monad Printer
+ Language.Fay.Types: instance MonadState PrintState Printer
+ Language.Fay.Types: newtype Printer a
+ Language.Fay.Types: psColumn :: PrintState -> Int
+ Language.Fay.Types: psIndentLevel :: PrintState -> Int
+ Language.Fay.Types: psLine :: PrintState -> Int
+ Language.Fay.Types: psMapping :: PrintState -> [(SrcLoc, SrcLoc)]
+ Language.Fay.Types: psOutput :: PrintState -> [String]
+ Language.Fay.Types: runPrinter :: Printer a -> State PrintState a
+ Language.Fay.Types: stateImported :: CompileState -> [String]
- Language.Fay.Prelude: length :: Num a => [t] -> a
+ Language.Fay.Prelude: length :: [a] -> Int
- Language.Fay.Types: CompileConfig :: Bool -> Bool -> Bool -> Bool -> [FilePath] -> Bool -> Bool -> [FilePath] -> Bool -> CompileConfig
+ Language.Fay.Types: CompileConfig :: Bool -> Bool -> Bool -> Bool -> [FilePath] -> Bool -> Bool -> [FilePath] -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> CompileConfig
- Language.Fay.Types: CompileState :: CompileConfig -> [Name] -> Bool -> ModuleName -> [(Name, [Name])] -> [JsStmt] -> [JsStmt] -> CompileState
+ Language.Fay.Types: CompileState :: CompileConfig -> [Name] -> Bool -> ModuleName -> [(Name, [Name])] -> [JsStmt] -> [JsStmt] -> [String] -> CompileState
- Language.Fay.Types: printJS :: Printable a => a -> String
+ Language.Fay.Types: printJS :: Printable a => a -> Printer ()
Files
- examples/canvaswater.hs +1/−1
- examples/data.hs +1/−1
- examples/tailrecursive.hs +1/−1
- fay.cabal +44/−21
- js/runtime.js +76/−25
- src/Docs.hs +14/−19
- src/Language/Fay.hs +140/−76
- src/Language/Fay/Compiler.hs +28/−14
- src/Language/Fay/Convert.hs +4/−2
- src/Language/Fay/FFI.hs +4/−1
- src/Language/Fay/Prelude.hs +8/−7
- src/Language/Fay/Print.hs +125/−112
- src/Language/Fay/Stdlib.hs +18/−4
- src/Language/Fay/Types.hs +34/−12
- src/Main.hs +55/−84
- src/System/Process/Extra.hs +4/−4
- src/Test/Api.hs +3/−3
- src/Test/CommandLine.hs +7/−4
- src/Test/Convert.hs +12/−5
- src/Test/Util.hs +1/−1
- src/Tests.hs +5/−5
- tests/Bool.hs +7/−1
- tests/Bool.js +126/−28
- tests/Double.hs +6/−0
- tests/Double.js +126/−28
- tests/Double2.hs +5/−0
- tests/Double2.js +126/−28
- tests/Double3.hs +5/−0
- tests/Double3.js +126/−28
- tests/Double4.hs +5/−0
- tests/Double4.js +126/−28
- tests/Hierarchical/Export.hs +3/−0
- tests/Hierarchical/RecordDefined.hs +5/−2
- tests/HierarchicalImport.hs +4/−1
- tests/HierarchicalImport.js +82/−28
- tests/List.hs +8/−3
- tests/List.js +129/−28
- tests/List2.hs +8/−3
- tests/List2.js +130/−28
- tests/Monad.hs +1/−1
- tests/Monad.js +82/−28
- tests/Monad2.hs +1/−1
- tests/Monad2.js +82/−28
- tests/RecCon.hs +5/−0
- tests/RecCon.js +128/−28
- tests/RecDecl +3/−0
- tests/RecDecl.hs +20/−1
- tests/RecDecl.js +141/−28
- tests/RecordImport_Export.hs +2/−0
- tests/RecordImport_Export.js +80/−26
- tests/RecordImport_Import.js +80/−26
- tests/String.hs +5/−0
- tests/String.js +126/−28
- tests/asPatternMatch.hs +1/−3
- tests/asPatternMatch.js +82/−28
- tests/basicFunctions.hs +9/−4
- tests/basicFunctions.js +129/−28
- tests/case.hs +5/−0
- tests/case.js +126/−28
- tests/case2.hs +5/−0
- tests/case2.js +126/−28
- tests/caseList.hs +5/−0
- tests/caseList.js +126/−28
- tests/caseWildcard.hs +5/−0
- tests/caseWildcard.js +126/−28
- tests/do.hs +5/−0
- tests/do.js +126/−28
- tests/doAssingPatternMatch.hs +5/−0
- tests/doAssingPatternMatch.js +126/−28
- tests/doBindAssign.hs +5/−0
- tests/doBindAssign.js +126/−28
- tests/emptyMain.hs +5/−0
- tests/emptyMain.js +125/−28
- tests/fix.hs +5/−0
- tests/fix.js +129/−28
- tests/fromInteger.hs +1/−1
- tests/fromInteger.js +82/−28
- tests/infixDataConst +3/−1
- tests/infixDataConst.hs +9/−7
- tests/infixDataConst.js +127/−28
- tests/ints +1/−0
- tests/ints.hs +13/−0
- tests/mutableReference.hs +1/−1
- tests/mutableReference.js +82/−28
- tests/patternGuards +3/−3
- tests/patternGuards.hs +10/−9
- tests/patternGuards.js +84/−30
- tests/patternMatchFail.hs +5/−0
- tests/patternMatchFail.js +126/−28
- tests/recordFunctionPatternMatch.hs +5/−0
- tests/recordFunctionPatternMatch.js +127/−28
- tests/recordPatternMatch.hs +5/−0
- tests/recordPatternMatch.js +126/−28
- tests/recordPatternMatch2.hs +5/−0
- tests/recordPatternMatch2.js +126/−28
- tests/recordUseBeforeDefine.hs +7/−2
- tests/recordUseBeforeDefine.js +127/−28
- tests/records.hs +5/−0
- tests/records.js +136/−28
- tests/reservedWords.hs +2/−0
- tests/reservedWords.js +126/−28
- tests/tailRecursion.hs +1/−1
- tests/tailRecursion.js +80/−26
- tests/then.hs +5/−0
- tests/then.js +126/−28
- tests/utf8 +1/−2
- tests/utf8.hs +5/−5
- tests/utf8.js +126/−28
- tests/where.hs +5/−0
- tests/where.js +126/−28
examples/canvaswater.hs view
@@ -1,4 +1,4 @@--- | Compile with: dist/build/fay/fay -autorun examples/canvaswater.hs+-- | Compile with: fay examples/canvaswater.hs {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE NoImplicitPrelude #-}
examples/data.hs view
@@ -1,6 +1,6 @@ -- Generate Show value. ----- $ fay -autorun examples/data.hs+-- $ fay examples/data.hs -- $ node examples/data.js -- (Foo { x = 123, y = "abc", z = (Bar) })
examples/tailrecursive.hs view
@@ -2,7 +2,7 @@ -- the JavaScript stack. -- -- See the ticket about optimizing tail-recursive functions for future--- work <https://github.com/chrisdone/fay/issues/19>+-- work <https://github.com/faylang/fay/issues/19> {-# LANGUAGE NoImplicitPrelude #-}
fay.cabal view
@@ -1,5 +1,5 @@ name: fay-version: 0.9.1.0+version: 0.9.2.0 synopsis: A compiler for Fay, a Haskell subset that compiles to JavaScript. description: Fay is a proper subset of Haskell which can be compiled (type-checked) with GHC, and compiled to JavaScript. It is lazy, pure, with a Fay monad,@@ -12,7 +12,7 @@ . > $ cabal unpack fay > $ cd fay-*- > $ cabal install -fdevel+ > $ cabal install > $ dist/build/fay-docs/fay-docs . .@@ -22,22 +22,44 @@ . /Release Notes/ .- * Infix constructor applications and infix operator constructors.+ * Fix name encoding. .- * Warn when NoImplicitPrelude isn't specified.+ * Add content-type to HTML generation. .- * Added fay --version.+ * Add calculator example. .- * Html wrapper enhancements.+ * Support built-in operators as (+), (*), etc. .- * Initial pass-through to collect record information. This means records can now be used before they're defined.+ * Fix self-referential thunks (see #89). .- * Expose more prelude functions.+ * Don't import modules twice. .- * Fixed doctype typo in HTML wrappers.+ * Handle where bindings in function definitions. .- * Basic interactive shell+ * Support record updates. .+ * Move to GHC type-checking (with --no-ghc).+ .+ * Remove invalid chars from UTF-8 tests.+ .+ * Remove --autorun, now it's the default.+ .+ * Fix nullary constructor comparison.+ .+ * Replace . with $ in module name generation.+ .+ * Reverse -fdevel flag.+ .+ * Skip type declarations in where.+ .+ * Add true/false to keywords.+ .+ * Add laziness back to infix operators.+ .+ * Switch to applicative parsing of options.+ .+ * Fix parens in conversion functions.+ . See full history at: <https://github.com/chrisdone/fay/commits> homepage: http://fay-lang.org/ license: BSD3@@ -55,6 +77,7 @@ examples/tailrecursive.hs examples/data.hs examples/canvaswater.hs examples/canvaswater.html examples/haskell.png -- Test cases+ tests/ints.hs tests/ints tests/asPatternMatch tests/caseList.hs tests/Double2.hs tests/fromInteger tests/List.hs tests/RecCon tests/recordPatternMatch@@ -137,7 +160,7 @@ docs/home.hs Flag devel- Description: Whether to build fay-tests and fay-docs+ Description: Don't build fay-tests and fay-docs if this flag is supplied Default: False library@@ -170,11 +193,12 @@ -- Requirements for the executables which -- `cabal-dev ghci' needs. HUnit,- blaze-html,+ blaze-html >= 0.5, blaze-markup, bytestring, time,- options,+ optparse-applicative,+ split, test-framework, test-framework-hunit, test-framework-th@@ -202,19 +226,19 @@ directory, filepath, groom,- options,+ optparse-applicative,+ split, haskeline executable fay-tests- if !flag(devel)+ if flag(devel) buildable: False hs-source-dirs: src ghc-options: -O2 -Wall -threaded -with-rtsopts=-N ghc-prof-options: -fprof-auto main-is: Tests.hs other-modules: Language.Fay.Compiler Test.Convert Test.Api Test.CommandLine Test.Util- if flag(devel)- build-depends: base >= 4 && < 5,+ build-depends: base >= 4 && < 5, mtl, haskell-src-exts, aeson,@@ -238,14 +262,13 @@ test-framework-th executable fay-docs- if !flag(devel)+ if flag(devel) buildable: False hs-source-dirs: src ghc-options: -O2 -Wall main-is: Docs.hs other-modules: Text.Blaze.Extra- if flag(devel)- build-depends: base >= 4 && < 5,+ build-depends: base >= 4 && < 5, mtl, haskell-src-exts, aeson,@@ -260,7 +283,7 @@ process, filepath, directory,- blaze-html,+ blaze-html >= 0.5, blaze-markup, bytestring, time,
js/runtime.js view
@@ -29,20 +29,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -161,6 +155,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -210,6 +209,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -271,30 +278,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -323,66 +342,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.
src/Docs.hs view
@@ -8,17 +8,15 @@ import Language.Fay (compileForDocs, compileViaStr) import Language.Fay.Compiler (compileFromTo)-import Language.Fay.Types (CompileConfig (..))+import Language.Fay.Types (CompileConfig(..)) -import Control.Exception+ import Control.Monad import qualified Data.ByteString.Lazy as L import Data.Char import Data.Default- import Data.Time import Prelude hiding (div, head)- import System.FilePath import Text.Blaze.Extra import Text.Blaze.Html5 as H hiding (contents, map, style)@@ -45,10 +43,13 @@ where compile file = do contents <- readFile file putStrLn $ "Generating " ++ file ++ " ..."- result <- compileViaStr def { configFlattenApps = True, configTCO = True } compileForDocs contents+ result <- compileViaStr def { configFlattenApps = True+ , configTCO = True+ , configTypecheck = False }+ compileForDocs contents case result of Right (javascript,_) -> return javascript- Left err -> throw err+ Left err -> error (show err) titlize = takeWhile (/='.') . upperize . takeFileName where upperize (x:xs) = toUpper x : xs upperize xs = xs@@ -58,7 +59,7 @@ generateJs = do putStrLn $ "Compiling " ++ inp ++ " to " ++ out ++ " ..."- compileFromTo def { configAutorun = True, configFlattenApps = True } inp out+ compileFromTo def { configFlattenApps = True, configTypecheck = False } inp out where docs = ("docs" </>) inp = docs "home.hs"@@ -155,14 +156,8 @@ li $ "Has fundamental data types (Double, String, etc.) based upon what JS can support" li $ "Outputs minifier-aware code for small compressed size" li $ "Has a trivial foreign function interface to JavaScript"- p $ do "Because Fay is intended to be small and simple, it relies on GHC, the Haskell compiler, "- "for static checking. So the workflow when working with Fay is: "- pre $ do- "$ ghc hello.hs\n"- "$ fay hello.hs"- p $ do "The "; code "ghc"; " call will compile the Fay (really, Haskell) code and run the type system, "- "and the call to "; code "fay"- " will actually generate JavaScript code under "; code "hello.js"; "."+ li $ "Typechecks using GHC"+ p $ a ! href "#examples" $ "Go to examples »" thejsproblem = do@@ -233,13 +228,13 @@ pre $ code "$ cabal install" h3 "Running" p "If developing, you can run the tests (you will need nodejs installed):"- pre $ code "$ cabal install -fdevel"+ pre $ code "$ cabal install" pre $ code "$ fay-tests" p "To compile a Fay program, run:"- pre $ code "$ fay --autorun foo.hs"- p $ do "The "; code "--autorun"; " flag will make sure that the "; code "main"; " function is called."+ pre $ code "$ fay foo.hs"+ p $ do "The "; code "--library"; " flag will prevent the "; code "main"; " function from being called." p "You can also install this via cabal-dev, but be sure to run the commands from the cabal-dev bin dir: "- pre $ code "$ cabal-dev install\n$ cabal-dev/bin/fay --autorun foo.hs"+ pre $ code "$ cabal-dev install\n$ cabal-dev/bin/fay --no-ghc foo.hs" h3 "Generate this Documentation" p "This web page is generated by the following call in the project directory:" pre $ code "$ fay-docs"
src/Language/Fay.hs view
@@ -3,7 +3,6 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TupleSections #-}-{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE ViewPatterns #-} {-# OPTIONS -Wall -fno-warn-name-shadowing -fno-warn-orphans #-} @@ -24,8 +23,9 @@ ,prettyPrintString) where -import Language.Fay.Print (jsEncodeName)+import Language.Fay.Print (jsEncodeName, printJSString) import Language.Fay.Types+import System.Process.Extra import Control.Applicative import Control.Monad.Error@@ -36,7 +36,9 @@ import Data.List import Data.Maybe import Data.String+import qualified Language.ECMAScript3.Parser as JS import Language.Haskell.Exts+ import Safe import System.Directory (doesFileExist, findExecutable) import System.Exit@@ -44,8 +46,6 @@ import System.IO import System.Process -import qualified Language.ECMAScript3.Parser as JS- -------------------------------------------------------------------------------- -- Top level entry points @@ -66,7 +66,7 @@ compileViaStr config with from = runCompile (defaultCompileState config) (parseResult (throwError . uncurry ParseError)- (fmap printJS . with)+ (fmap printJSString . with) (parseFay from)) -- | Compile a Haskell source string to a JavaScript source string.@@ -110,7 +110,7 @@ -- | Compile a String of Fay and print it as beautified JavaScript. printTestCompile :: String -> IO ()-printTestCompile = printCompile def compileToplevelModule+printTestCompile = printCompile def { configWarn = False } compileModule -- | Compile the given Fay code for the documentation. This is -- specialised because the documentation isn't really “real”@@ -122,8 +122,13 @@ -- | Compile the top-level Fay module. compileToplevelModule :: Module -> Compile [JsStmt]-compileToplevelModule mod = do+compileToplevelModule mod@(Module _ (ModuleName modulename) _ _ _ _ _) = do+ cfg <- gets stateConfig+ when (configTypecheck cfg) $+ typecheck (configDirectoryIncludes cfg) [] (configWall cfg) $+ fromMaybe modulename $ configFilePath cfg initialPass mod+ modify $ \s -> s { stateImported = stateImported (defaultCompileState def) } stmts <- compileModule mod fay2js <- gets (fayToJsDispatcher . stateFayToJs) js2fay <- gets (jsToFayDispatcher . stateJsToFay)@@ -140,21 +145,22 @@ initialPass mod = throwError (UnsupportedModuleSyntax mod) initialPass_import :: ImportDecl -> Compile ()-initialPass_import (ImportDecl _ (ModuleName name) _ _ _ _ _)- | elem name ["Language.Fay.Prelude","Language.Fay.FFI","Language.Fay.Types"] || name == "Prelude" = return () initialPass_import (ImportDecl _ (ModuleName name) False _ Nothing Nothing Nothing) = do- dirs <- configDirectoryIncludes <$> gets stateConfig- contents <- io (findImport dirs name)- cs <- gets id- result <- liftIO $ initialPass_records cs initialPass contents- case result of- Right ((),state) -> do- -- Merges the state gotten from passing through an imported- -- module with the current state. We can assume no duplicate- -- records exist since GHC would pick that up.- modify $ \s -> s { stateRecords = stateRecords state ++ stateRecords s }- Left err -> throwError err-+ void $ unlessImported name $ do+ dirs <- configDirectoryIncludes <$> gets stateConfig+ contents <- io (findImport dirs name)+ cs <- gets id+ result <- liftIO $ initialPass_records cs initialPass contents+ case result of+ Right ((),state) -> do+ -- Merges the state gotten from passing through an imported+ -- module with the current state. We can assume no duplicate+ -- records exist since GHC would pick that up.+ modify $ \s -> s { stateRecords = stateRecords state+ , stateImported = stateImported state+ }+ Left err -> throwError err+ return [] initialPass_import i = error $ "Initial pass: Import syntax not supported. " ++@@ -182,13 +188,13 @@ -- | Collect record definitions and store record name and field names. -- A ConDecl will have fields named slot1..slotN initialPass_dataDecl :: Bool -> Decl -> [QualConDecl] -> Compile ()-initialPass_dataDecl _ decl constructors =+initialPass_dataDecl _ _decl constructors = forM_ constructors $ \(QualConDecl _ _ _ condecl) -> case condecl of ConDecl (UnQual -> name) types -> do let fields = map (Ident . ("slot"++) . show . fst) . zip [1 :: Integer ..] $ types addRecordState name fields- InfixConDecl t1 (UnQual -> name) t2 ->+ InfixConDecl _t1 (UnQual -> name) _t2 -> addRecordState name ["slot1", "slot2"] RecDecl (UnQual -> name) fields' -> do let fields = concatMap fst fields'@@ -198,7 +204,18 @@ addRecordState :: QName -> [Name] -> Compile () addRecordState name fields = modify $ \s -> s { stateRecords = (Ident (qname name), fields) : stateRecords s } +--------------------------------------------------------------------------------+-- Typechecking +typecheck :: [FilePath] -> [String] -> Bool -> String -> Compile ()+typecheck includeDirs ghcFlags wall fp = do+ res <- liftIO $ readAllFromProcess' "ghc" (+ ["-fno-code", "-package fay", fp] ++ map ("-i" ++) includeDirs ++ ghcFlags ++ wallF) ""+ either error (warn . fst) res+ where+ wallF | wall = ["-Wall"]+ | otherwise = []+ -------------------------------------------------------------------------------- -- Compilers @@ -216,10 +233,16 @@ return (imported ++ current) compileModule mod = throwError (UnsupportedModuleSyntax mod) +warn :: String -> Compile ()+warn "" = return ()+warn w = do+ shouldWarn <- configWarn <$> gets stateConfig+ when shouldWarn . liftIO . hPutStrLn stderr $ "Warning: " ++ w+ checkModulePragmas :: [ModulePragma] -> Compile () checkModulePragmas pragmas = when (not $ any noImplicitPrelude pragmas) $- liftIO $ hPutStrLn stderr "Warning: NoImplicitPrelude not specified"+ warn "NoImplicitPrelude not specified" where noImplicitPrelude :: ModulePragma -> Bool noImplicitPrelude (LanguagePragma _ names) = any (== (Ident "NoImplicitPrelude")) names@@ -241,25 +264,35 @@ -- | Compile the given import. compileImport :: ImportDecl -> Compile [JsStmt]-compileImport (ImportDecl _ (ModuleName name) _ _ _ _ _)- | elem name ["Language.Fay.Prelude","Language.Fay.FFI","Language.Fay.Types"] || name == "Prelude" = return [] compileImport (ImportDecl _ (ModuleName name) False _ Nothing Nothing Nothing) = do- dirs <- configDirectoryIncludes <$> gets stateConfig- contents <- io (findImport dirs name)- state <- gets id- result <- liftIO $ compileToAst state compileModule contents- case result of- Right (stmts,state) -> do- modify $ \s -> s { stateFayToJs = stateFayToJs state ++ stateFayToJs s- , stateJsToFay = stateJsToFay state ++ stateJsToFay s- }- return stmts- Left err -> throwError err+ unlessImported name $ do+ dirs <- configDirectoryIncludes <$> gets stateConfig+ contents <- io (findImport dirs name)+ state <- gets id+ result <- liftIO $ compileToAst state compileModule contents+ case result of+ Right (stmts,state) -> do+ modify $ \s -> s { stateFayToJs = stateFayToJs state+ , stateJsToFay = stateJsToFay state+ , stateImported = stateImported state+ }+ return stmts+ Left err -> throwError err compileImport i = error $ "compileImport: Import syntax not supported. " ++ "The compiler writer was too lazy to support that.\n" ++ "It was: " ++ show i +-- | Don't re-import the same modules.+unlessImported :: String -> Compile [JsStmt] -> Compile [JsStmt]+unlessImported name importIt = do+ imported <- gets stateImported+ if elem name imported+ then return []+ else do+ modify $ \s -> s { stateImported = name : imported }+ importIt+ -- | Compile Haskell declaration. compileDecls :: Bool -> [Decl] -> Compile [JsStmt] compileDecls toplevel decls =@@ -295,29 +328,30 @@ compilePatBind :: Bool -> Maybe Type -> Decl -> Compile [JsStmt] compilePatBind toplevel sig pat = case pat of- PatBind _ (PVar ident) Nothing (UnGuardedRhs rhs) (BDecls []) ->+ PatBind srcloc (PVar ident) Nothing (UnGuardedRhs rhs) (BDecls []) -> case ffiExp rhs of Just formatstr -> case sig of- Just sig -> compileFFI ident formatstr sig+ Just sig -> compileFFI srcloc ident formatstr sig Nothing -> throwError (FfiNeedsTypeSig pat)- _ -> compileNormalPatBind toplevel ident rhs- PatBind _ (PVar ident) Nothing (UnGuardedRhs rhs) bdecls ->- compileNormalPatBind toplevel ident (Let bdecls rhs)+ _ -> compileUnguardedRhs srcloc toplevel ident rhs+ PatBind srcloc (PVar ident) Nothing (UnGuardedRhs rhs) bdecls ->+ compileUnguardedRhs srcloc toplevel ident (Let bdecls rhs) _ -> throwError (UnsupportedDeclaration pat) where ffiExp (App (Var (UnQual (Ident "ffi"))) (Lit (String formatstr))) = Just formatstr ffiExp _ = Nothing -- | Compile an FFI call.-compileFFI :: Name -- ^ Name of the to-be binding.+compileFFI :: SrcLoc -- ^ Location of the original FFI decl.+ -> Name -- ^ Name of the to-be binding. -> String -- ^ The format string. -> Type -- ^ Type signature. -> Compile [JsStmt]-compileFFI name formatstr sig = do+compileFFI srcloc name formatstr sig = do inner <- formatFFI formatstr (zip params funcFundamentalTypes)- case JS.parse JS.parseExpression (prettyPrint name) (printJS (wrapReturn inner)) of+ case JS.parse JS.parseExpression (prettyPrint name) (printJSString (wrapReturn inner)) of Left err -> throwError (FfiFormatInvalidJavaScript inner (show err))- Right{} -> fmap return (bindToplevel True (UnQual name) (body inner))+ Right{} -> fmap return (bindToplevel srcloc True (UnQual name) (body inner)) where body inner = foldr wrapParam (wrapReturn inner) params wrapParam name inner = JsFun [name] [] (Just inner)@@ -359,7 +393,7 @@ case listToMaybe (drop (n-1) args) of Nothing -> throwError (FfiFormatNoSuchArg n) Just (arg,typ) -> do- return (printJS (fayToJs (typeRep typ) (JsName arg)))+ return (printJSString (fayToJs (typeRep typ) (JsName arg))) -- | Translate: Fay → JS. fayToJs :: JsExp -> JsExp -> JsExp@@ -381,6 +415,7 @@ where nom = case typ of StringType -> "string" DoubleType -> "double"+ IntType -> "int" BoolType -> "bool" DateType -> "date" _ -> "unknown"@@ -400,6 +435,7 @@ case t of TyCon "String" -> StringType TyCon "Double" -> DoubleType+ TyCon "Int" -> IntType TyCon "Bool" -> BoolType TyApp (TyCon "Fay") a -> JsType (argType a) TyFun x xs -> FunctionType (argType x : functionTypeArgs xs)@@ -434,10 +470,10 @@ _ -> 0 -- | Compile a normal simple pattern binding.-compileNormalPatBind :: Bool -> Name -> Exp -> Compile [JsStmt]-compileNormalPatBind toplevel ident rhs = do+compileUnguardedRhs :: SrcLoc -> Bool -> Name -> Exp -> Compile [JsStmt]+compileUnguardedRhs srcloc toplevel ident rhs = do body <- compileExp rhs- bind <- bindToplevel toplevel (UnQual ident) (thunk body)+ bind <- bindToplevel srcloc toplevel (UnQual ident) (thunk body) return [bind] convertGADT :: GadtDecl -> QualConDecl@@ -454,9 +490,9 @@ -- | Compile a data declaration. compileDataDecl :: Bool -> Decl -> [QualConDecl] -> Compile [JsStmt]-compileDataDecl toplevel decl constructors =+compileDataDecl toplevel _decl constructors = fmap concat $- forM constructors $ \(QualConDecl _ _ _ condecl) ->+ forM constructors $ \(QualConDecl srcloc _ _ condecl) -> case condecl of ConDecl (UnQual -> name) types -> do let fields = map (Ident . ("slot"++) . show . fst) . zip [1 :: Integer ..] $ types@@ -478,7 +514,7 @@ let fields = concatMap fst fields' cons <- makeConstructor name fields func <- makeFunc name fields- funs <- makeAccessors fields+ funs <- makeAccessors srcloc fields emitFayToJs name fields' emitJsToFay name fields' return (cons : func : funs)@@ -504,9 +540,10 @@ fieldParams -- Creates getters for a RecDecl's values- makeAccessors fields =+ makeAccessors srcloc fields = forM fields $ \(Ident name) ->- bindToplevel toplevel+ bindToplevel srcloc+ toplevel (fromString name) (JsFun ["x"] []@@ -614,17 +651,11 @@ -- | Compile a function which pattern matches (causing a case analysis). compileFunCase :: Bool -> [Match] -> Compile [JsStmt] compileFunCase _toplevel [] = return []-compileFunCase toplevel matches@(Match _ name argslen _ _ _:_) = do- tco <- config configTCO- pats <- fmap optimizePatConditions $ forM matches $ \match@(Match _ _ pats _ rhs wheres) -> do- unless (noBinds wheres) $ do _ <- throwError (UnsupportedWhereInMatch match) -- TODO: Support `where'.- return ()- exp <- compileRhs rhs- foldM (\inner (arg,pat) ->- compilePat (JsName arg) pat inner)- [JsEarlyReturn exp]- (zip args pats)- bind <- bindToplevel toplevel+compileFunCase toplevel matches@(Match srcloc name argslen _ _ _:_) = do+ tco <- config configTCO+ pats <- fmap optimizePatConditions (mapM compileCase matches)+ bind <- bindToplevel srcloc+ toplevel (UnQual name) (foldr (\arg inner -> JsFun [arg] [] (Just inner)) (stmtsThunk (let stmts = (concat pats ++ basecase)@@ -634,14 +665,32 @@ args) return [bind] where args = zipWith const uniqueNames argslen++ isWildCardMatch (Match _ _ pats _ _ _) = all isWildCardPat pats++ compileCase :: Match -> Compile [JsStmt]+ compileCase match@(Match _ _ pats _ rhs _) = do+ whereDecls' <- whereDecls match+ exp <- compileRhs rhs+ body <- if null whereDecls'+ then return exp+ else do+ binds <- mapM compileLetDecl whereDecls'+ return (JsApp (JsFun [] (concat binds) (Just exp)) [])+ foldM (\inner (arg,pat) ->+ compilePat (JsName arg) pat inner)+ [JsEarlyReturn body]+ (zip args pats)++ whereDecls :: Match -> Compile [Decl]+ whereDecls (Match _ _ _ _ _ (BDecls decls)) = return decls+ whereDecls match = throwError (UnsupportedWhereInMatch match)++ basecase :: [JsStmt] basecase = if any isWildCardMatch matches then [] else [throw ("unhandled case in " ++ show name) (JsList (map JsName args))]- isWildCardMatch (Match _ _ pats _ _ _) = all isWildCardPat pats- noBinds (BDecls []) = True- noBinds (IPBinds []) = True- noBinds _ = False -- | Optimize functions in tail-call form. optimizeTailCalls :: [JsParam] -- ^ The function parameters.@@ -725,8 +774,8 @@ Tuple xs -> compileList xs If cond conseq alt -> compileIf cond conseq alt Case exp alts -> compileCase exp alts- Con (UnQual (Ident "True")) -> return (JsName "true")- Con (UnQual (Ident "False")) -> return (JsName "false")+ Con (UnQual (Ident "True")) -> return (JsLit (JsBool True))+ Con (UnQual (Ident "False")) -> return (JsLit (JsBool False)) Con exp -> return (JsName exp) Do stmts -> compileDoBlock stmts Lambda _ pats exp -> compileLambda pats exp@@ -737,6 +786,7 @@ return (JsApp (JsApp (JsName "enumFromTo") [f]) [t]) RecConstr name fieldUpdates -> compileRecConstr name fieldUpdates+ RecUpdate rec fieldUpdates -> updateRec rec fieldUpdates ExpTypeSig _ e _ -> compileExp e exp -> throwError (UnsupportedExpression exp)@@ -781,7 +831,8 @@ | symbol `elem` words "* + - / < > || &&" -> do e1 <- compileExp exp1 e2 <- compileExp exp2- return (JsInfix symbol (forceInlinable config e1) (forceInlinable config e2))+ fn <- resolveOpToVar >=> compileExp $ op+ return $ JsApp (JsApp (force fn) [(forceInlinable config e1)]) [(forceInlinable config e2)] _ -> do var <- resolveOpToVar op compileExp (App (App var exp1) exp2)@@ -860,6 +911,7 @@ (QVarOp (UnQual (Symbol ">>"))) inner)) LetStmt (BDecls binds) -> return (Just (Let (BDecls binds) inner))+ LetStmt _ -> throwError LetUnsupported RecStmt{} -> throwError RecursiveDoUnsupported compileGenerator srcloc pat inner exp = do@@ -915,6 +967,17 @@ \(FieldUpdate (UnQual field) value) -> JsSetProp o (UnQual field) <$> compileExp value return $ JsApp (JsFun [] (record:setFields) (Just (JsName o))) [] +updateRec :: Exp -> [FieldUpdate] -> Compile JsExp+updateRec rec fieldUpdates = do+ record <- force <$> compileExp rec+ let copyName = UnQual (Ident "$_record_to_update")+ copy = JsVar copyName+ (JsRawExp ("Object.create(" ++ printJSString record ++ ")"))+ setFields <- forM fieldUpdates $+ \(FieldUpdate (UnQual field) value) ->+ JsSetProp copyName (UnQual field) <$> compileExp value+ return $ JsApp (JsFun [] (copy:setFields) (Just (JsName copyName))) []+ -- | Equality test for two expressions, with some optimizations. equalExps :: JsExp -> JsExp -> JsExp equalExps a b@@ -1004,6 +1067,7 @@ case decl of decl@PatBind{} -> compileDecls False [decl] decl@FunBind{} -> compileDecls False [decl]+ TypeSig{} -> return [] _ -> throwError (UnsupportedLetBinding decl) -- | Compile Haskell literal.@@ -1137,11 +1201,11 @@ hjIdent = Qual (ModuleName "Fay") . Ident -- | Make a top-level binding.-bindToplevel :: Bool -> QName -> JsExp -> Compile JsStmt-bindToplevel toplevel name exp = do+bindToplevel :: SrcLoc -> Bool -> QName -> JsExp -> Compile JsStmt+bindToplevel srcloc toplevel name exp = do exportAll <- gets stateExportAll when (toplevel && exportAll) $ emitExport (EVar name)- return (JsVar name exp)+ return (JsMappedVar srcloc name exp) -- | Emit exported names. emitExport :: ExportSpec -> Compile ()
src/Language/Fay/Compiler.hs view
@@ -6,14 +6,15 @@ module Language.Fay.Compiler where -import Language.Fay (compileToplevelModule,compileViaStr,prettyPrintString)-import Language.Fay.Types+import Language.Fay (compileToplevelModule, compileViaStr, prettyPrintString)+import Language.Fay.Types+import Language.Fay.Print -import Control.Monad-import Language.Haskell.Exts.Syntax-import Paths_fay-import System.FilePath-import Text.Groom+import Control.Monad+import Language.Haskell.Exts.Syntax+import Paths_fay+import System.FilePath+import Text.Groom -- | A result of something the compiler writes. class Writer a where@@ -34,8 +35,16 @@ -- | Compile file program to… compileFromTo :: CompileConfig -> FilePath -> FilePath -> IO () compileFromTo config filein fileout = do- result <- compileFile config filein+ result <- compileFromToReturningStatus config filein fileout case result of+ Right () -> return ()+ Left err -> error . groom $ err++-- | Compile file program to…+compileFromToReturningStatus :: CompileConfig -> FilePath -> FilePath -> IO (Either CompileError ())+compileFromToReturningStatus config filein fileout = do+ result <- compileFile config { configFilePath = Just filein } filein+ case result of Right out -> do writeFile fileout out when (configHtmlWrapper config) $@@ -43,6 +52,7 @@ "<!doctype html>" , "<html>" , " <head>"+ ," <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" , unlines . map (" "++) . map makeScriptTagSrc $ configHtmlJSLibs config , " " ++ makeScriptTagSrc relativeJsPath , " </script>"@@ -50,11 +60,12 @@ , " <body>" , " </body>" , "</html>"]+ return (Right ()) where relativeJsPath = makeRelative (dropFileName fileout) fileout makeScriptTagSrc :: FilePath -> String makeScriptTagSrc = \s -> "<script type=\"text/javascript\" src=\"" ++ s ++ "\"></script>"- Left err -> error . groom $ err+ Left err -> return (Left err) -- | Compile readable/writable values. compileReadWrite :: (Reader r, Writer w) => CompileConfig -> r -> w -> IO ()@@ -96,7 +107,7 @@ then prettyPrintString out else return out - where generate jscode exports (ModuleName modulename) = unlines+ where generate jscode exports (ModuleName (clean -> modulename)) = unlines ["/** @constructor" ,"*/" ,"var " ++ modulename ++ " = function(){"@@ -113,20 +124,23 @@ ] else "" ,"};"- ,if configAutorun config+ ,if not (configLibrary config) then unlines [";" ,"var main = new " ++ modulename ++ "();" ,"main._(main.main);" ] else "" ]+ clean ('.':cs) = '$' : clean cs+ clean (c:cs) = c : clean cs+ clean [] = [] -- | Print an this.x = x; export out. printExport :: Name -> String printExport name =- printJS (JsSetProp ":this"- (UnQual name)- (JsName (UnQual name)))+ printJSString (JsSetProp ":this"+ (UnQual name)+ (JsName (UnQual name))) -- | Convert a Haskell filename to a JS filename. toJsName :: String -> String
src/Language/Fay/Convert.hs view
@@ -15,6 +15,7 @@ import Control.Monad import Data.Aeson import Data.Attoparsec.Number+ import Data.Char import Data.Data import Data.Function@@ -97,7 +98,7 @@ case v of Object obj -> do name <- Map.lookup "instance" obj >>= getText- readRecord name obj <|> readData name obj+ fmap parens (readRecord name obj <|> readData name obj) Array array -> do elems <- mapM convert (Vector.toList array) return $ concat ["[",intercalate "," elems,"]"]@@ -133,7 +134,7 @@ fields <- forM (constrFields cons) $ \field -> do (key,v) <- getField field cvalue <- convert v- return (intercalate " " [key,"=",cvalue])+ return (unwords [key,"=",cvalue]) guard $ not $ null fields return (Text.unpack name ++ if null fields@@ -143,3 +144,4 @@ typ = dataTypeOf $ resType result resType :: Maybe a -> a resType = undefined+ parens x = "(" ++ x ++ ")"
src/Language/Fay/FFI.hs view
@@ -5,7 +5,7 @@ module Language.Fay.FFI where import Language.Fay.Types (Fay)-import Prelude (Bool, Char, Double, String, error)+import Prelude (Bool, Char, Double, String, Int, error) -- | In case you want to distinguish values with a JsPtr. data JsPtr a@@ -18,6 +18,9 @@ -- | All numbers in JS are double. instance Foreign Double++-- | Some numbers in JS are int.+instance Foreign Int -- | Characters are OK. instance Foreign Char
src/Language/Fay/Prelude.hs view
@@ -6,6 +6,7 @@ ,String ,Integer ,Double+ ,Int ,Bool(..) ,Show(show) ,Read@@ -34,15 +35,15 @@ ,module Language.Fay.Stdlib) where -import Language.Fay.Stdlib-import Language.Fay.Types (Fay)+import Language.Fay.Stdlib+import Language.Fay.Types (Fay) -import Data.Data+import Data.Data -import GHC.Real (Ratio)-import Prelude (Bool(..), Eq(..), Char, Double, Integer, Maybe(..), Ord, Read(..),- Show(..), String, error, read, (&&), (*), (+), (-), (/), (/=), (<),- (<=), (==), (>), (>=), (||),Monad)+import GHC.Real (Ratio)+import Prelude (Bool(..), Char, Double, Eq(..), Int, Integer, Maybe(..), Monad,+ Ord, Read(..), Show(..), String, error, read, (&&), (*), (+), (-),+ (/), (/=), (<), (<=), (==), (>), (>=), (||)) -- | Just to satisfy GHC. fromInteger :: Integer -> Double
src/Language/Fay/Print.hs view
@@ -1,4 +1,5 @@ {-# OPTIONS -fno-warn-orphans #-}+{-# OPTIONS -fno-warn-unused-do-bind #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}@@ -15,158 +16,146 @@ module Language.Fay.Print where -import Language.Fay.Types+import Language.Fay.Types -import Data.Aeson.Encode+import Control.Monad+import Control.Monad.State+import Data.Aeson.Encode import qualified Data.ByteString.Lazy.UTF8 as UTF8-import Data.List-import Data.String-import Language.Haskell.Exts.Syntax-import Prelude hiding (exp)+import Data.Default+import Data.List+import Data.String+import Language.Haskell.Exts.Syntax+import Prelude hiding (exp) -------------------------------------------------------------------------------- -- Printing +printJSString :: Printable a => a -> String+printJSString x = concat $ reverse $ psOutput $ execState (runPrinter (printJS x)) def+ -- | Print literals. These need some special encoding for -- JS-format literals. Could use the Text.JSON library. instance Printable JsLit where- printJS (JsChar char) = UTF8.toString (encode (UTF8.fromString [char]))- printJS (JsStr str) = UTF8.toString (encode (UTF8.fromString str))- printJS (JsInt int) = show int- printJS (JsFloating rat) = show rat- printJS (JsBool b) = if b then "true" else "false"+ printJS typ = write $+ let u8 = UTF8.toString . encode . UTF8.fromString+ in case typ of+ (JsChar char) -> u8 [char]+ (JsStr str) -> u8 str+ (JsInt int) -> show int+ (JsFloating rat) -> show rat+ (JsBool b) -> if b then "true" else "false" -- | Print (and properly encode to JS) a qualified name. instance Printable QName where printJS qname = case qname of- Qual moduleName name -> printJS moduleName ++ "$$" ++ printJS name+ Qual moduleName name -> do printJS moduleName+ "$$"+ printJS name UnQual name -> printJS name Special con -> printJS con -- | Print special constructors (tuples, list, etc.) instance Printable SpecialCon where printJS specialCon =- case specialCon of- UnitCon -> printJS (Qual "Fay" (Ident "unit"))- ListCon -> printJS (Qual "Fay" (Ident "emptyList"))- FunCon -> printJS (Qual "Fay" (Ident "funCon"))- TupleCon boxed n -> printJS (Qual "Fay"- (Ident (if boxed == Boxed- then "boxed"- else "unboxed" ++- "TupleOf" ++ show n)))- Cons -> printJS (Qual "Fay" (Ident "cons"))- UnboxedSingleCon -> printJS (Qual "Fay" (Ident "unboxedSingleCon"))+ printJS $ (Qual "Fay" . Ident) $+ case specialCon of+ UnitCon -> "unit"+ ListCon -> "emptyList"+ FunCon -> "funCon"+ TupleCon boxed n -> (if boxed == Boxed+ then "boxed"+ else "unboxed" +++ "TupleOf" ++ show n)+ Cons -> "cons"+ UnboxedSingleCon -> "unboxedSingleCon" -- | Print module name. instance Printable ModuleName where printJS (ModuleName moduleName) =- jsEncodeName moduleName+ write $ jsEncodeName moduleName -- | Print (and properly encode) a name. instance Printable Name where- printJS name =+ printJS name = write $ case name of Ident ident -> jsEncodeName ident Symbol sym -> jsEncodeName sym -- | Print a list of statements. instance Printable [JsStmt] where- printJS = concatMap printJS+ printJS = mapM_ printJS -- | Print a single statement. instance Printable JsStmt where- printJS (JsBlock stmts) =- "{ " ++ unwords (map printJS stmts) ++ "}"- printJS (JsVar name expr) =- unwords ["var",printJS name,"=",printJS expr ++ ";"]- printJS (JsUpdate name expr) =- unwords [printJS name,"=",printJS expr ++ ";"]- printJS (JsSetProp name prop expr) =- concat [printJS name,".",printJS prop," = ",printJS expr ++ ";"]- printJS (JsIf exp thens elses) =- concat- [("if (" ++ printJS exp ++ ") {")- ,printJS thens] ++- if length elses > 0- then concat ["} else {"- ,printJS elses ++ "}"]- else "}"- printJS (JsEarlyReturn exp) =- "return " ++ printJS exp ++ ";"- printJS (JsThrow exp) =- "throw " ++ printJS exp ++ ";"- printJS (JsWhile cond stmts) =- unwords ["while (" ++ printJS cond ++ ") {"- ,printJS stmts- ,"}"]+ printJS (JsBlock stmts) = do+ "{ "; mapM printJS stmts; "}"+ printJS (JsVar name expr) = do "var "; printJS name; " = "; printJS expr; ";"+ printJS (JsUpdate name expr) = do printJS name; " = "; printJS expr; ";"+ printJS (JsSetProp name prop expr) = do+ printJS name; "."; printJS prop; " = "; printJS expr; ";"+ printJS (JsIf exp thens elses) = do+ "if ("; printJS exp; ") {"+ printJS thens+ "}"+ when (length elses > 0) $ do+ " else {"+ printJS elses+ "}"+ printJS (JsEarlyReturn exp) = do+ "return "; printJS exp; ";"+ printJS (JsThrow exp) = do+ "throw "; printJS exp; ";"+ printJS (JsWhile cond stmts) = do+ "while ("; printJS cond; ") {"+ printJS stmts+ "}" printJS JsContinue = "continue;"+ printJS (JsMappedVar _ name expr) = do "var "; printJS name; " = "; printJS expr; ";" -- | Print an expression. instance Printable JsExp where- printJS (JsRawExp name) = name- printJS (JsThrowExp exp) =- "(function(){ throw (" ++ printJS exp ++ "); })()"- printJS (JsFun params stmts ret) =- concat ["function("- ,intercalate "," (map (printJS) params)- ,"){"- ,printJS stmts- ] ++- case ret of- Just ret' ->- concat ["return "- ,printJS ret'- ,";"- ,"}"]- Nothing -> "}"+ printJS (JsRawExp name) = write name+ printJS (JsThrowExp exp) = do "(function(){ throw ("; printJS exp; "); })()" printJS JsNull = "null"- printJS (JsSequence exprs) =- intercalate "," (map printJS exprs) printJS (JsName name) = printJS name- printJS (JsApp op args) =- printJS (if isFunc op then JsParen op else op) ++- "(" ++- intercalate "," (map (printJS) args) +++ printJS (JsLit lit) = printJS lit+ printJS (JsParen exp) = do "("; printJS exp; ")"+ printJS (JsList exps) = do "["; intercalateM "," (map printJS exps); "]"+ printJS (JsNew name args) = do "new "; printJS (JsApp (JsName name) args)+ printJS (JsIndex i exp) = do "("; printJS exp; ")["; write (show i); "]"+ printJS (JsEq exp1 exp2) = do printJS exp1; " === "; printJS exp2+ printJS (JsGetProp exp prop) = do printJS exp; "."; printJS prop+ printJS (JsLookup exp1 exp2) = do printJS exp1; "["; printJS exp2; "]"+ printJS (JsUpdateProp name prop expr) = do+ "("; printJS name; "."; printJS prop; " = "; printJS expr; ")"+ printJS (JsInfix op x y) = do printJS x; " "; write op; " "; printJS y+ printJS (JsGetPropExtern exp prop) = do+ printJS exp; "["; printJS (JsLit (JsStr prop)); "]"+ printJS (JsUpdatePropExtern name prop expr) = do+ "("; printJS name; "['"; printJS prop; "'] = "; printJS expr; ")"+ printJS (JsTernaryIf cond conseq alt) = do+ printJS cond; " ? "; printJS conseq; " : "; printJS alt+ printJS (JsInstanceOf exp classname) = do+ printJS exp; " instanceof "; printJS classname+ printJS (JsObj assoc) = do "{"; intercalateM "," (map cons assoc); "}"+ where cons (key,value) = do "\""; write key; "\": "; printJS value+ printJS (JsFun params stmts ret) = do+ "function("+ intercalateM "," (map printJS params)+ "){"+ printJS stmts+ case ret of+ Just ret' -> do "return "; printJS ret'; ";"+ Nothing -> return ()+ "}"+ printJS (JsApp op args) = do+ printJS (if isFunc op then JsParen op else op)+ "("+ intercalateM "," (map (printJS) args) ")" where isFunc JsFun{..} = True; isFunc _ = False- printJS (JsLit lit) = printJS lit- printJS (JsParen exp) = "(" ++ printJS exp ++ ")"- printJS (JsTernaryIf cond conseq alt) =- concat [printJS cond ++ " ? "- , printJS conseq ++ " : "- , printJS alt]- printJS (JsList exps) =- "[" ++- intercalate "," (map printJS exps) ++- "]"- printJS (JsNew name args) =- "new " ++ printJS (JsApp (JsName name) args)- printJS (JsInstanceOf exp classname) =- printJS exp ++ " instanceof " ++ printJS classname- printJS (JsIndex i exp) =- "(" ++ printJS exp ++ ")[" ++ show i ++ "]"- printJS (JsEq exp1 exp2) =- printJS exp1 ++ " === " ++ printJS exp2- printJS (JsGetProp exp prop) =- printJS exp ++ "." ++ printJS prop- printJS (JsLookup exp1 exp2) =- printJS exp1 ++ "[" ++ printJS exp2 ++ "]"- printJS (JsUpdateProp name prop expr) =- concat ["(",printJS name,".",printJS prop," = ",printJS expr,")"]- printJS (JsInfix op x y) =- printJS x ++ " " ++ op ++ " " ++ printJS y- -- Externs: Careful, here be dragons! Or at least warm lizards.- printJS (JsGetPropExtern exp prop) =- printJS exp ++ "[" ++ printJS (JsLit (JsStr prop)) ++ "]"- printJS (JsUpdatePropExtern name prop expr) =- concat ["(",printJS name,"['",printJS prop,"'] = ",printJS expr,")"]- printJS (JsObj assoc) =- concat ["{"- ,intercalate "," (map cons assoc)- ,"}"]- where cons (key,value) = "\"" ++ key ++ "\": " ++ printJS value -------------------------------------------------------------------------------- -- Utilities@@ -179,9 +168,10 @@ "extends", "finally", "for", "function", "global", "implements", "instanceof", "interface", "new", "null", "package", "private", "protected", "public", "return", "static", "super", "switch", "this", "throw", "try", "typeof", "undefined",- "var", "void", "while", "window", "with", "yield"]+ "var", "void", "while", "window", "with", "yield","true","false"] -- | Encode a Haskell name to JavaScript.+-- TODO: Fix this hack. jsEncodeName :: String -> String -- Special symbols: jsEncodeName ":tmp" = "$tmp"@@ -190,10 +180,14 @@ -- jsEncodeName ":return" = "return" -- Used keywords: jsEncodeName name- | "$_" `isPrefixOf` name = name- | name `elem` reservedWords = "$_" ++ name+ | "$_" `isPrefixOf` name = normalize name+ | name `elem` reservedWords = "$_" ++ normalize name -- Anything else.-jsEncodeName name =+jsEncodeName name = normalize name++-- | Normalize the given name to JavaScript-valid names.+normalize :: [Char] -> [Char]+normalize name = concatMap encodeChar name where@@ -203,6 +197,21 @@ escapeChar c = "$" ++ charId c ++ "$" charId c = show (fromEnum c) +-- |+write :: String -> Printer a+write x = do+ modify $ \s -> s { psOutput = x : psOutput s }+ return (error "Nothing to return for writer string.")++intercalateM :: String -> [Printer a] -> Printer ()+intercalateM _ [] = return ()+intercalateM _ [x] = x >> return ()+intercalateM str (x:xs) = do+ x+ write str+ intercalateM str xs++ -- | Helpful for writing qualified symbols (Fay.*). instance IsString ModuleName where fromString = ModuleName@@ -210,3 +219,7 @@ -- | Helpful for writing variable names. instance IsString JsName where fromString = UnQual . Ident++-- | For the pretty printer convenience.+instance IsString (Printer a) where+ fromString = write
src/Language/Fay/Stdlib.hs view
@@ -10,6 +10,7 @@ ,elem ,enumFrom ,enumFromTo+ ,fromIntegral ,filter ,find ,flip@@ -29,7 +30,9 @@ ,not ,nub ,null+ ,otherwise ,prependToAll+ ,reverse ,snd ,sort ,sortBy@@ -40,8 +43,9 @@ ,min) where -import Language.Fay.FFI-import Prelude (Double,Bool(..),Maybe(..),Ord((>),(<)),Eq(..),Monad(..),Num(..),(||))+import Language.Fay.FFI+import Prelude (Bool(..), Double, Eq(..), Int, Maybe(..), Monad(..), Num(..),+ Ord((>), (<)), (||)) -- START @@ -191,7 +195,6 @@ forM_ (x:xs) m = m x >> forM_ xs m forM_ [] _ = return () - mapM_ :: Monad m => (a -> m b) -> [a] -> m () mapM_ m (x:xs) = m x >> mapM_ m xs mapM_ _ [] = return ()@@ -199,7 +202,8 @@ const :: a -> b -> a const a _ = a -length (x:xs) = 1 + length xs+length :: [a] -> Int+length (_:xs) = 1 + length xs length [] = 0 mod :: Double -> Double -> Double@@ -210,3 +214,13 @@ max :: Double -> Double -> Double max = ffi "Math.max(%1,%2)"++fromIntegral :: Int -> Double+fromIntegral = ffi "%1"++otherwise :: Bool+otherwise = True++reverse :: [a] -> [a]+reverse (x:xs) = reverse xs ++ [x]+reverse [] = []
src/Language/Fay/Types.hs view
@@ -19,15 +19,17 @@ ,CompileConfig(..) ,CompileState(..) ,defaultCompileState- ,FundamentalType(..))+ ,FundamentalType(..)+ ,PrintState(..)+ ,Printer(..)) where import Control.Applicative-import Control.Exception+ import Control.Monad.Error (Error, ErrorT, MonadError) import Control.Monad.Identity (Identity) import Control.Monad.State-import Data.Data+ import Data.Default import Language.Haskell.Exts @@ -44,12 +46,16 @@ , configPrettyPrint :: Bool , configHtmlWrapper :: Bool , configHtmlJSLibs :: [FilePath]- , configAutorun :: Bool- } deriving (Show)+ , configLibrary :: Bool+ , configWarn :: Bool+ , configFilePath :: Maybe FilePath+ , configTypecheck :: Bool+ , configWall :: Bool+ } -- | Default configuration. instance Default CompileConfig where- def = CompileConfig False False False True [] False False [] False+ def = CompileConfig False False False True [] False False [] False True Nothing True False -- | State of the compiler. data CompileState = CompileState@@ -60,7 +66,8 @@ , stateRecords :: [(Name,[Name])] -- records with field names , stateFayToJs :: [JsStmt] , stateJsToFay :: [JsStmt]-} deriving (Show)+ , stateImported :: [String] -- ^ Names of imported modules so far.+} defaultCompileState :: CompileConfig -> CompileState defaultCompileState config = CompileState {@@ -71,6 +78,7 @@ , stateRecords = [(Ident "Nothing",[]),(Ident "Just",[Ident "slot1"])] , stateFayToJs = [] , stateJsToFay = []+ , stateImported = ["Language.Fay.Prelude","Language.Fay.FFI","Language.Fay.Types","Prelude"] } -- | Compile monad.@@ -93,9 +101,23 @@ class (Parseable from,Printable to) => CompilesTo from to | from -> to where compileTo :: from -> Compile to +data PrintState = PrintState+ { psLine :: Int+ , psColumn :: Int+ , psMapping :: [(SrcLoc,SrcLoc)]+ , psIndentLevel :: Int+ , psOutput :: [String]+ }++instance Default PrintState where+ def = PrintState 0 0 [] 0 []++newtype Printer a = Printer { runPrinter :: State PrintState a }+ deriving (Monad,Functor,MonadState PrintState)+ -- | Print some value. class Printable a where- printJS :: a -> String+ printJS :: a -> Printer () -- | Error type. data CompileError@@ -121,9 +143,8 @@ | FfiFormatNoSuchArg Int | FfiFormatIncompleteArg | FfiFormatInvalidJavaScript String String- deriving (Show,Eq,Data,Typeable)+ deriving (Show) instance Error CompileError-instance Exception CompileError -- | The JavaScript FFI interfacing monad. newtype Fay a = Fay (Identity a)@@ -135,6 +156,7 @@ -- | Statement type. data JsStmt = JsVar JsName JsExp+ | JsMappedVar SrcLoc JsName JsExp | JsIf JsExp [JsStmt] [JsStmt] | JsEarlyReturn JsExp | JsThrow JsExp@@ -154,7 +176,6 @@ | JsApp JsExp [JsExp] | JsTernaryIf JsExp JsExp JsExp | JsNull- | JsSequence [JsExp] | JsParen JsExp | JsGetProp JsExp JsName | JsLookup JsExp JsExp@@ -195,7 +216,8 @@ | DateType | StringType | DoubleType+ | IntType | BoolType -- | Unknown. | UnknownType- deriving (Show,Eq)+ deriving (Show)
src/Main.hs view
@@ -1,7 +1,6 @@ {-# OPTIONS -fno-warn-orphans #-} {-# OPTIONS -fno-warn-orphans #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TemplateHaskell #-} -- | Main compiler executable. module Main where@@ -15,75 +14,71 @@ import Control.Monad import Control.Monad.Error import Data.Default+import Data.List.Split (wordsBy) import Data.Maybe import Data.Version (showVersion)-import Options+import Options.Applicative import System.Console.Haskeline-import System.Environment-import System.Exit import System.IO -- | Options and help.-defineOptions "FayCompilerOptions" $ do+data FayCompilerOptions = FayCompilerOptions+ { optLibrary :: Bool+ , optInlineForce :: Bool+ , optFlattenApps :: Bool+ , optHTMLWrapper :: Bool+ , optHTMLJSLibs :: [String]+ , optInclude :: [String]+ , optWall :: Bool+ , optNoGHC :: Bool+ , optStdout :: Bool+ , optVersion :: Bool+ , optOutput :: Maybe String+ , optPretty :: Bool+ , optFiles :: [String]+ } - -- boolOption "optExportBuiltins" "export-builtins" True ""- -- boolOption "optTCO" "tco" False ""+options :: Parser FayCompilerOptions+options = FayCompilerOptions+ <$> switch (long "library" & help "Don't automatically call main in generated JavaScript")+ <*> switch (long "inline-force" & help "inline forcing, adds some speed for numbers, blows up code a bit")+ <*> switch (long "flatten-apps" & help "flatten function applicaton") - boolOption "optAutoRun" "autorun" False "automatically call main in generated JavaScript"- boolOption "optInlineForce" "inline-force" False "inline forcing, adds some speed for numbers, blows up code a bit"- boolOption "optFlattenApps" "flatten-apps" False "flatten function applicaton"+ <*> switch (long "html-wrapper" & help "Create an html file that loads the javascript")+ <*> strsOption (long "html-js-lib" & metavar "file1[, ..]" & help "javascript files to add to <head> if using option html-wrapper") - boolOption "optHTMLWrapper" "html-wrapper" False "Create an html file that loads the javascript"- stringsOption "optHTMLJSLibs" "html-js-lib" [] "file1[, ..] javascript files to add to <head> if using option html-wrapper"+ <*> strsOption (long "include" & metavar "dir1[, ..]" & help "additional directories for include") - stringsOption "optInclude" "include" [] "dir1[, ..] additional directories for include"+ <*> switch (long "Wall" & help "Typecheck with -Wall")+ <*> switch (long "no-ghc" & help "Don't typecheck, specify when not working with files") - option "optStdout" (\o -> o- { optionLongFlags = ["stdout"]- , optionShortFlags = ['s']- , optionDefault = "false"- , optionType = optionTypeBool- , optionDescription = "Output to stdout"- })- option "optVersion" (\o -> o- { optionLongFlags = ["version"]- , optionShortFlags = ['v']- , optionDefault = "false"- , optionType = optionTypeBool- , optionDescription = "Output version number"- })- option "optOutput" (\o -> o- { optionLongFlags = ["output"]- , optionShortFlags = ['o']- , optionDefault = ""- , optionType = optionTypeMaybe optionTypeString- , optionDescription = "Output to specified file"- })- option "optPretty" (\o -> o- { optionLongFlags = ["pretty"]- , optionShortFlags = ['p']- , optionDefault = "false"- , optionType = optionTypeBool- , optionDescription = "Run javascript through js-beautify"- })+ <*> switch (long "stdout" & short 's' & help "Output to stdout")+ <*> switch (long "version" & help "Output version number")+ <*> nullOption (long "output" & short 'o' & reader (Just . Just) & value Nothing & help "Output to specified file")+ <*> switch (long "pretty" & short 'p' & help "Pretty print the output") + <*> arguments Just (metavar "- | <hs-file>...")++ where+ strsOption m = nullOption (m & reader (Just . wordsBy (== ',')) & value [])+ -- | The basic help text.-helpTxt :: [String]-helpTxt =- ["fay -- The fay compiler from (a proper subset of) Haskell to Javascript"- ,"USAGE"- ," fay [OPTIONS] [- | <hs-file>...]"- ," fay - takes input on stdin and prints to stdout. Runs through js-beautify if available"+helpTxt :: String+helpTxt = concat+ ["fay -- The fay compiler from (a proper subset of) Haskell to Javascript\n\n"+ ,"SYNOPSIS\n"+ ," fay [OPTIONS] [- | <hs-file>...]\n"+ ," fay - takes input on stdin and prints to stdout. Pretty prints\n" ," fay <hs-file>... processes each .hs file" ] -- | Main entry point. main :: IO ()-main =- runCommandHelp (unlines helpTxt) $ \opts files ->- if optVersion opts- then runCommandVersion- else (do+main = do+ opts <- execParser parser+ if optVersion opts+ then runCommandVersion+ else (do let config = def { configTCO = False -- optTCO opts , configInlineForce = optInlineForce opts , configFlattenApps = optFlattenApps opts@@ -91,18 +86,19 @@ , configDirectoryIncludes = "." : optInclude opts , configPrettyPrint = optPretty opts- , configAutorun = optAutoRun opts+ , configLibrary = optLibrary opts , configHtmlWrapper = optHTMLWrapper opts , configHtmlJSLibs = optHTMLJSLibs opts+ , configTypecheck = not $ optNoGHC opts+ , configWall = optWall opts }- void $ E.catch (incompatible htmlAndStdout opts "Html wrapping and stdout are incompatible")- errorUsage+ void $ incompatible htmlAndStdout opts "Html wrapping and stdout are incompatible" - case files of+ case optFiles opts of ["-"] -> do hGetContents stdin >>= printCompile config compileModule [] -> runInteractive- _ -> forM_ files $ \file -> do+ files -> forM_ files $ \file -> do if optStdout opts then compileReadWrite config file stdout else@@ -110,15 +106,11 @@ where+ parser = info (helper <*> options) (fullDesc & header helpTxt)+ outPutFile :: FayCompilerOptions -> String -> FilePath outPutFile opts file = fromMaybe (toJsName file) $ optOutput opts - errorUsage :: IOError -> IO a- errorUsage e = do- putStrLn $ "ERROR: \n " ++ (show e)- args <- getArgs- usageMsg args $ unlines $ drop 1 helpTxt- runInteractive :: IO () runInteractive = runInputT defaultSettings loop@@ -135,31 +127,10 @@ Right (ok,_) -> liftIO (prettyPrintString ok) >>= outputStr loop -runCommandHelp :: (MonadIO m, Options opts) => String -> (opts -> [String] -> m a) -> m a-runCommandHelp help io = do- argv <- liftIO getArgs- let parsed = parseOptions argv- case parsedOptions parsed of- Just opts -> io opts (parsedArguments parsed)- Nothing -> liftIO $ usageMsg argv help- runCommandVersion :: IO () runCommandVersion = putStrLn $ "fay " ++ showVersion version --usageMsg :: [String] -> String -> IO a-usageMsg argv help = do- putStrLn help- let parsed = parseOptions argv :: ParsedOptions FayCompilerOptions- case parsedError parsed of- Just err -> do- hPutStrLn stderr (parsedHelp parsed)- hPutStrLn stderr err- exitFailure- Nothing -> do- hPutStr stdout (parsedHelp parsed)- exitSuccess htmlAndStdout :: FayCompilerOptions -> Bool htmlAndStdout opts = optHTMLWrapper opts && optStdout opts
src/System/Process/Extra.hs view
@@ -16,9 +16,9 @@ ExitSuccess -> fmap Right (hGetContents out) ExitFailure _ -> fmap Left (hGetContents err) -readAllFromProcess' :: FilePath -> [String] -> String -> IO (Either String String)+readAllFromProcess' :: FilePath -> [String] -> String -> IO (Either String (String,String)) readAllFromProcess' program flags input = do (code,out,err) <- readProcessWithExitCode program flags input- case code of- ExitSuccess -> return $ Right out- ExitFailure _ -> return $ Left err+ return $ case code of+ ExitFailure _ -> Left err+ ExitSuccess -> Right (err, out)
src/Test/Api.hs view
@@ -5,16 +5,16 @@ import Data.Default import Language.Fay.Compiler import Language.Fay.Types-import Test.HUnit (Assertion, assertBool)-import Test.Util import Test.Framework import Test.Framework.Providers.HUnit import Test.Framework.TH+import Test.HUnit (Assertion, assertBool)+import Test.Util tests :: Test tests = $testGroupGenerator case_imports :: Assertion case_imports = do- res <- compileFile def { configDirectoryIncludes = ["tests"] } "tests/RecordImport_Import.hs"+ res <- compileFile def { configTypecheck = False, configDirectoryIncludes = ["tests"] } "tests/RecordImport_Import.hs" assertBool "Could not compile file with imports" (isRight res)
src/Test/CommandLine.hs view
@@ -5,11 +5,11 @@ import Control.Applicative import Data.Maybe import System.Process.Extra-import Test.HUnit (Assertion, assertBool)-import Test.Util import Test.Framework import Test.Framework.Providers.HUnit import Test.Framework.TH+import Test.HUnit (Assertion, assertBool)+import Test.Util tests :: Test tests = $testGroupGenerator@@ -17,7 +17,10 @@ compileFile :: [String] -> IO (Either String String) compileFile flags = do fay <- fromJust <$> fayPath- readAllFromProcess' fay flags ""+ r <- readAllFromProcess' fay flags ""+ return $ case r of+ Left l -> Left l+ Right t -> Right $ snd t case_executable :: Assertion case_executable = do@@ -26,5 +29,5 @@ case_compile :: Assertion case_compile = do- res <- compileFile ["--autorun", "--include=tests", "tests/RecordImport_Import.hs"]+ res <- compileFile ["--include=tests", "tests/RecordImport_Import.hs","--no-ghc"] assertBool (fromLeft res) (isRight res)
src/Test/Convert.hs view
@@ -3,20 +3,20 @@ module Test.Convert (tests) where -import qualified Data.Aeson.Parser as Aeson+import qualified Data.Aeson.Parser as Aeson import Data.Attoparsec.ByteString-import qualified Data.ByteString as Bytes-import qualified Data.ByteString.UTF8 as UTF8+import qualified Data.ByteString as Bytes+import qualified Data.ByteString.UTF8 as UTF8 import Data.Data import Data.Ratio import Language.Fay.Convert-import Test.HUnit (assertEqual) import Test.Framework import Test.Framework.Providers.HUnit+import Test.HUnit (assertEqual) tests :: Test tests = testGroup "Test.Convert" [reading, showing]- where reading = testGroup "reading" $ + where reading = testGroup "reading" $ flip map readTests $ \(ReadTest value) -> let label = show value in testCase label $@@ -50,6 +50,7 @@ ,ReadTest $ LabelledRecord { barInt = 123, barDouble = 66.6 } ,ReadTest $ LabelledRecord2 { bar = 123, bob = 66.6 } ,ReadTest $ FooBar "Tinkie Winkie" "Humanzee" Zot+ ,ReadTest $ Bar $ Foo "one" "two" ] -- | Test cases.@@ -69,6 +70,7 @@ ,NAryConstructor 123 4.5 → "{\"slot1\":123,\"slot2\":4.5,\"instance\":\"NAryConstructor\"}" ,LabelledRecord { barInt = 123, barDouble = 4.5 } → "{\"barDouble\":4.5,\"barInt\":123,\"instance\":\"LabelledRecord\"}"+ ,Bar (Foo "one" "two") → "{\"slot1\":{\"slot1\":\"one\",\"slot2\":\"two\",\"instance\":\"Foo\"},\"instance\":\"Bar\"}" -- Unicode ,"¡ ¢ £ ¤ ¥ " → "\"¡ ¢ £ ¤ ¥ \"" ,"Ā ā Ă ă Ą " → "\"Ā ā Ă ă Ą \""@@ -91,6 +93,11 @@ ] where x → y = Testcase x (UTF8.fromString y)++data Foo = Foo String String+ deriving (Show,Data,Typeable,Read,Eq)+data Bar = Bar Foo+ deriving (Show,Data,Typeable,Read,Eq) -- | Nullary constructor. data NullaryConstructor = NullaryConstructor
src/Test/Util.hs view
@@ -14,7 +14,7 @@ dist <- doesFileExist distPath if dist then return (Just distPath)- else either (const Nothing) (Just . concat . lines) <$> readAllFromProcess' "which" ["fay"] ""+ else either (const Nothing) (Just . concat . lines . snd) <$> readAllFromProcess' "which" ["fay"] "" where cabalDevPath = "./cabal-dev/bin/fay" distPath = "./dist/build/fay/fay"
src/Tests.hs view
@@ -12,12 +12,12 @@ import System.Directory import System.FilePath import System.Process.Extra-import qualified Test.Api as Api-import qualified Test.CommandLine as Cmd-import qualified Test.Convert as C-import Test.HUnit (assertEqual)+import qualified Test.Api as Api+import qualified Test.CommandLine as Cmd+import qualified Test.Convert as C import Test.Framework import Test.Framework.Providers.HUnit+import Test.HUnit (assertEqual) -- | Main test runner. main :: IO ()@@ -34,7 +34,7 @@ let root = (reverse . drop 1 . dropWhile (/='.') . reverse) file out = toJsName file outExists <- doesFileExist root- compileFromTo def { configAutorun = True, configDirectoryIncludes = ["tests/"] } file out+ compileFromTo def { configTypecheck = False, configDirectoryIncludes = ["tests/"] } file out result <- runJavaScriptFile out if outExists then do output <- readFile root
tests/Bool.hs view
@@ -1,6 +1,12 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Bool where++import Language.Fay.FFI+import Language.Fay.Prelude++main :: Fay () main = print True -print :: Double -> Fay ()+print :: Bool -> Fay () print = ffi "console.log(%1)"
tests/Bool.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Bool = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(true);});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(true);});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["bool"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Bool(); main._(main.main);
tests/Double.hs view
@@ -1,4 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-}++module Double where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (2 * 4 / 2) print :: Double -> Fay ()
tests/Double.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Double = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(_(2 * 4) / 2);});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(Fay$$div)(_(_(Fay$$mult)(2)(4)))(2));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Double(); main._(main.main);
tests/Double2.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Double2 where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (10 + (2 * (4 / 2))) print :: Double -> Fay ()
tests/Double2.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Double2 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(10 + _(2 * _(4 / 2)));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(Fay$$add)(10)(_(_(Fay$$mult)(2)(_(_(Fay$$div)(4)(2))))));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Double2(); main._(main.main);
tests/Double3.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Double3 where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (5 * 3 / 2) print :: Double -> Fay ()
tests/Double3.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Double3 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(_(5 * 3) / 2);});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(Fay$$div)(_(_(Fay$$mult)(5)(3)))(2));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Double3(); main._(main.main);
tests/Double4.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Double4 where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print 1 print :: Double -> Fay ()
tests/Double4.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Double4 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(1);});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(1);});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Double4(); main._(main.main);
tests/Hierarchical/Export.hs view
@@ -2,5 +2,8 @@ module Hierarchical.Export where +import Language.Fay.FFI+import Language.Fay.Prelude+ exported :: String exported = "exported"
tests/Hierarchical/RecordDefined.hs view
@@ -1,7 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} -module RecordDefined where+module Hierarchical.RecordDefined where -data Callback a = Callback Integer+import Language.Fay.FFI+import Language.Fay.Prelude++data Callback a = Callback Double g (Callback a) = a
tests/HierarchicalImport.hs view
@@ -1,6 +1,9 @@ {-# LANGUAGE NoImplicitPrelude #-} -module Main where+module HierarchicalImport where++import Language.Fay.FFI+import Language.Fay.Prelude import Hierarchical.Export
tests/HierarchicalImport.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var HierarchicalImport = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var exported = new $(function(){return Fay$$list("exported");});var main = new $(function(){return _(printS)(exported);});var printS = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var exported = new $(function(){return Fay$$list("exported");});var main = new $(function(){return _(printS)(exported);});var printS = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -473,6 +527,6 @@ }; ;-var main = new Main();+var main = new HierarchicalImport(); main._(main.main);
tests/List.hs view
@@ -1,12 +1,17 @@ {-# LANGUAGE NoImplicitPrelude #-} -main = print (showList (take 5 (let ns = 1 : map (\x -> x + 1) ns in ns)))+module List where +import Language.Fay.FFI+import Language.Fay.Prelude++main = print (showList (take 5 (let ns = 1 : map' (\x -> x + 1) ns in ns)))+ take 0 _ = [] take n (x:xs) = x : take (n - 1) xs -map f [] = []-map f (x:xs) = f x : map f xs+map' f [] = []+map' f (x:xs) = f x : map' f xs print :: String -> Fay () print = ffi "console.log(%1)"
tests/List.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var List = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,58 @@ * Application code. */ -var main = new $(function(){return _(print)(_(showList)(_(_(take)(5))((function(){var ns = new $(function(){return _(_(Fay$$cons)(1))(_(_(map)(function($_a){var x = $_a;return _(x) + 1;}))(ns));});return ns;})())));});var take = function($_a){return function($_b){return new $(function(){if (_($_a) === 0) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var n = $_a;return _(_(Fay$$cons)(x))(_(_(take)(_(n) - 1))(xs));}throw ["unhandled case in Ident \"take\"",[$_a,$_b]];});};};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var f = $_a;return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var showList = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["list",[["double"]]],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(showList)(_(_(take)(5))((function(){var ns = new $(function(){return _(_(Fay$$cons)(1))(_(_(map$39$)(function($36$_a){var x = $36$_a;return _(Fay$$add)(_(x))(1);}))(ns));});return ns;})())));});var take = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === 0) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var n = $36$_a;return _(_(Fay$$cons)(x))(_(_(take)(_(Fay$$sub)(_(n))(1)))(xs));}throw ["unhandled case in Ident \"take\"",[$36$_a,$36$_b]];});};};var map$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var f = $36$_a;return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map$39$)(f))(xs));}throw ["unhandled case in Ident \"map'\"",[$36$_a,$36$_b]];});};};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var showList = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["list",[["double"]]],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.showList = showList;+this.print = print;+this.map$39$ = map$39$;+this.take = take; this.main = main; // Built-ins@@ -429,6 +530,6 @@ }; ;-var main = new Main();+var main = new List(); main._(main.main);
tests/List2.hs view
@@ -1,14 +1,19 @@ {-# LANGUAGE NoImplicitPrelude #-} -main = print (showList (take 5 (let ns = 1 : map (foo 123) ns in ns)))+module List2 where +import Language.Fay.FFI+import Language.Fay.Prelude++main = print (showList (take 5 (let ns = 1 : map' (foo 123) ns in ns)))+ foo x y = x * y / 2 take 0 _ = [] take n (x:xs) = x : take (n - 1) xs -map f [] = []-map f (x:xs) = f x : map f xs+map' f [] = []+map' f (x:xs) = f x : map' f xs print :: String -> Fay () print = ffi "console.log(%1)"
tests/List2.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var List2 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,59 @@ * Application code. */ -var main = new $(function(){return _(print)(_(showList)(_(_(take)(5))((function(){var ns = new $(function(){return _(_(Fay$$cons)(1))(_(_(map)(_(foo)(123)))(ns));});return ns;})())));});var foo = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) * _(y)) / 2;});};};var take = function($_a){return function($_b){return new $(function(){if (_($_a) === 0) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var n = $_a;return _(_(Fay$$cons)(x))(_(_(take)(_(n) - 1))(xs));}throw ["unhandled case in Ident \"take\"",[$_a,$_b]];});};};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var f = $_a;return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var showList = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["list",[["double"]]],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(showList)(_(_(take)(5))((function(){var ns = new $(function(){return _(_(Fay$$cons)(1))(_(_(map$39$)(_(foo)(123)))(ns));});return ns;})())));});var foo = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(Fay$$div)(_(_(Fay$$mult)(_(x))(_(y))))(2);});};};var take = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === 0) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var n = $36$_a;return _(_(Fay$$cons)(x))(_(_(take)(_(Fay$$sub)(_(n))(1)))(xs));}throw ["unhandled case in Ident \"take\"",[$36$_a,$36$_b]];});};};var map$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var f = $36$_a;return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map$39$)(f))(xs));}throw ["unhandled case in Ident \"map'\"",[$36$_a,$36$_b]];});};};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var showList = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["list",[["double"]]],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.showList = showList;+this.print = print;+this.map$39$ = map$39$;+this.take = take;+this.foo = foo; this.main = main; // Built-ins@@ -429,6 +531,6 @@ }; ;-var main = new Main();+var main = new List2(); main._(main.main);
tests/Monad.hs view
@@ -3,7 +3,7 @@ -- | Monads test. -module Monads where+module Monad where import Language.Fay.FFI import Language.Fay.Prelude
tests/Monad.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Monads = function(){+var Monad = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$$61$)(_($_return)(123)))(function($_a){if (_($_a) === 123) {return _(_($62$$62$$61$)(_($_return)(456)))(function($_a){var x = $_a;return _(_($62$$62$)(_(_($62$$62$)(_(print)(x)))(_($_return)(Fay$$unit))))(_(_($62$$62$$61$)(_(_($62$$62$$61$)(_($_return)(666)))(function($_a){return _($_return)(789);})))(function($_a){var x = $_a;return _(_($62$$62$$61$)(_($_return)(101112)))(function($_a){var y = $_a;return _(_($62$$62$)(_(print)(x)))(_(print)(y));});}));});}throw ["unhandled case",$_a];});});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$$61$)(_($_return)(123)))(function($36$_a){if (_($36$_a) === 123) {return _(_($62$$62$$61$)(_($_return)(456)))(function($36$_a){var x = $36$_a;return _(_($62$$62$)(_(_($62$$62$)(_(print)(x)))(_($_return)(Fay$$unit))))(_(_($62$$62$$61$)(_(_($62$$62$$61$)(_($_return)(666)))(function($36$_a){return _($_return)(789);})))(function($36$_a){var x = $36$_a;return _(_($62$$62$$61$)(_($_return)(101112)))(function($36$_a){var y = $36$_a;return _(_($62$$62$)(_(print)(x)))(_(print)(y));});}));});}throw ["unhandled case",$36$_a];});});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -473,6 +527,6 @@ }; ;-var main = new Monads();+var main = new Monad(); main._(main.main);
tests/Monad2.hs view
@@ -4,7 +4,7 @@ -- | Monads test. -module Monads where+module Monad2 where import Language.Fay.FFI import Language.Fay.Prelude
tests/Monad2.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Monads = function(){+var Monad2 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$$61$)(_($_return)((function(){var result = new $(function(){return _(_(runState)(demo))(60);});return _(_($43$$43$)(_(fst)(result)))(_(_($43$$43$)(Fay$$list(": ")))(_(show)(_(snd)(result))));})())))(print);});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Monad = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Monad = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $_Monad(slot1,slot2,slot3);});};};};var demo = new $(function(){return (function($_stateMonad){if (_($_stateMonad) instanceof $_Monad) {var $_return = _($_stateMonad).slot1;var $62$$62$$61$ = _($_stateMonad).slot2;var $62$$62$ = _($_stateMonad).slot3;return _(_($62$$62$$61$)(get))(function($_a){var n = $_a;return _(_($62$$62$)(_(put)(_(n) * 2)))(_(_($62$$62$$61$)(get))(function($_a){var n = $_a;return _(_($62$$62$)(_(put)(_(n) + 3)))(_($_return)(Fay$$list("abc")));}));});}return (function(){ throw (["unhandled case",$_stateMonad]); })();})(stateMonad);});var $_State = function(runState){this.runState = runState;};var State = function(runState){return new $(function(){return new $_State(runState);});};var runState = function(x){return new $(function(){return _(x).runState;});};var stateMonad = new $(function(){var $_return = new $(function(){return function($_a){var x = $_a;return _(State)(function($_a){var st = $_a;return Fay$$list([x,st]);});};});var $62$$62$$61$ = new $(function(){return function($_a){var processor = $_a;return function($_b){var processorGenerator = $_b;return _(_($36$)(State))(function($_a){var st = $_a;return (function($tmp){var x = Fay$$index(0)(_($tmp));var st$39$ = Fay$$index(1)(_($tmp));return _(_(runState)(_(processorGenerator)(x)))(st$39$);return (function(){ throw (["unhandled case",$tmp]); })();})(_(_(runState)(processor))(st));});};};});var $62$$62$ = new $(function(){return function($_a){var a = $_a;return function($_b){var b = $_b;return _(_($62$$62$$61$)(a))(function($_a){return b;});};};});return _(_(_(Monad)($_return))($62$$62$$61$))($62$$62$);});var put = function($_a){return new $(function(){var newState = $_a;return _(_($36$)(State))(function($_a){return Fay$$list([Fay$$unit,newState]);});});};var get = new $(function(){return _(_($36$)(State))(function($_a){var st = $_a;return Fay$$list([st,st]);});});var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_State) {return {"instance": "State","runState": Fay$$fayToJs(["function",[["unknown"],["unknown"]]],_(_obj.runState))};}if (_obj instanceof $_Monad) {return {"instance": "Monad","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["unknown"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["unknown"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "State") {return new $_State(Fay$$jsToFay(["function",[["unknown"],["unknown"]]],obj["runState"]));}if (obj["instance"] === "Monad") {return new $_Monad(Fay$$jsToFay(["unknown"],obj["slot1"]),Fay$$jsToFay(["unknown"],obj["slot2"]),Fay$$jsToFay(["unknown"],obj["slot3"]));}return obj;};+var main = new $(function(){return _(_($62$$62$$61$)(_($_return)((function(){var result = new $(function(){return _(_(runState)(demo))(60);});return _(_($43$$43$)(_(fst)(result)))(_(_($43$$43$)(Fay$$list(": ")))(_(show)(_(snd)(result))));})())))(print);});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Monad = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Monad = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $36$_Monad(slot1,slot2,slot3);});};};};var demo = new $(function(){return (function($36$_stateMonad){if (_($36$_stateMonad) instanceof $36$_Monad) {var $_return = _($36$_stateMonad).slot1;var $62$$62$$61$ = _($36$_stateMonad).slot2;var $62$$62$ = _($36$_stateMonad).slot3;return _(_($62$$62$$61$)(get))(function($36$_a){var n = $36$_a;return _(_($62$$62$)(_(put)(_(Fay$$mult)(_(n))(2))))(_(_($62$$62$$61$)(get))(function($36$_a){var n = $36$_a;return _(_($62$$62$)(_(put)(_(Fay$$add)(_(n))(3))))(_($_return)(Fay$$list("abc")));}));});}return (function(){ throw (["unhandled case",$36$_stateMonad]); })();})(stateMonad);});var $36$_State = function(runState){this.runState = runState;};var State = function(runState){return new $(function(){return new $36$_State(runState);});};var runState = function(x){return new $(function(){return _(x).runState;});};var stateMonad = new $(function(){var $_return = new $(function(){return function($36$_a){var x = $36$_a;return _(State)(function($36$_a){var st = $36$_a;return Fay$$list([x,st]);});};});var $62$$62$$61$ = new $(function(){return function($36$_a){var processor = $36$_a;return function($36$_b){var processorGenerator = $36$_b;return _(_($36$)(State))(function($36$_a){var st = $36$_a;return (function($tmp){var x = Fay$$index(0)(_($tmp));var st$39$ = Fay$$index(1)(_($tmp));return _(_(runState)(_(processorGenerator)(x)))(st$39$);return (function(){ throw (["unhandled case",$tmp]); })();})(_(_(runState)(processor))(st));});};};});var $62$$62$ = new $(function(){return function($36$_a){var a = $36$_a;return function($36$_b){var b = $36$_b;return _(_($62$$62$$61$)(a))(function($36$_a){return b;});};};});return _(_(_(Monad)($_return))($62$$62$$61$))($62$$62$);});var put = function($36$_a){return new $(function(){var newState = $36$_a;return _(_($36$)(State))(function($36$_a){return Fay$$list([Fay$$unit,newState]);});});};var get = new $(function(){return _(_($36$)(State))(function($36$_a){var st = $36$_a;return Fay$$list([st,st]);});});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_State) {return {"instance": "State","runState": Fay$$fayToJs(["function",[["unknown"],["unknown"]]],_(_obj.runState))};}if (_obj instanceof $36$_Monad) {return {"instance": "Monad","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["unknown"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["unknown"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "State") {return new $36$_State(Fay$$jsToFay(["function",[["unknown"],["unknown"]]],obj["runState"]));}if (obj["instance"] === "Monad") {return new $36$_Monad(Fay$$jsToFay(["unknown"],obj["slot1"]),Fay$$jsToFay(["unknown"],obj["slot2"]),Fay$$jsToFay(["unknown"],obj["slot3"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -478,6 +532,6 @@ }; ;-var main = new Monads();+var main = new Monad2(); main._(main.main);
tests/RecCon.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecCon where++import Language.Fay.FFI+import Language.Fay.Prelude+ data Bool = True | False main = print (head (fix (\xs -> 123 : xs)))
tests/RecCon.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecCon = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,57 @@ * Application code. */ -var $_True = function(){};var True = new $(function(){return new $_True();});var $_False = function(){};var False = new $(function(){return new $_False();});var main = new $(function(){return _(print)(_(head)(_(fix)(function($_a){var xs = $_a;return _(_(Fay$$cons)(123))(xs);})));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var head = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return x;}throw ["unhandled case in Ident \"head\"",[$_a]];});};var fix = function($_a){return new $(function(){var f = $_a;return (function(){var x = new $(function(){return _(f)(x);});return x;})();});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_False) {return {"instance": "False"};}if (_obj instanceof $_True) {return {"instance": "True"};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "False") {return new $_False();}if (obj["instance"] === "True") {return new $_True();}return obj;};+var $36$_True = function(){};var True = new $(function(){return new $36$_True();});var $36$_False = function(){};var False = new $(function(){return new $36$_False();});var main = new $(function(){return _(print)(_(head)(_(fix)(function($36$_a){var xs = $36$_a;return _(_(Fay$$cons)(123))(xs);})));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var head = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return x;}throw ["unhandled case in Ident \"head\"",[$36$_a]];});};var fix = function($36$_a){return new $(function(){var f = $36$_a;return (function(){var x = new $(function(){return _(f)(x);});return x;})();});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_False) {return {"instance": "False"};}if (_obj instanceof $36$_True) {return {"instance": "True"};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "False") {return new $36$_False();}if (obj["instance"] === "True") {return new $36$_True();}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.fix = fix;+this.head = head;+this.print = print; this.main = main; // Built-ins@@ -429,6 +529,6 @@ }; ;-var main = new Main();+var main = new RecCon(); main._(main.main);
tests/RecDecl view
@@ -1,3 +1,6 @@+{ instance: 'R', i: 10, c: 'a' }+{ instance: 'R', i: 20, c: 'a' }+{ instance: 'R', i: 123, c: 'b' } { instance: 'R', i: 1, c: 'a' } 1 "a"
tests/RecDecl.hs view
@@ -1,7 +1,14 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecDecl where++import Language.Fay.FFI+import Language.Fay.Prelude+ data R = R { i :: Double, c :: Char }+instance Foreign R data S = S Double Char+instance Foreign S -- RecDecl r1 :: R@@ -25,10 +32,22 @@ -- Multiple fields with the same type data X = X { _x1, _x2 :: Int }+instance Foreign X+ x1 = X 1 2 x2 = X { _x1 = 1, _x2 = 2 } +-- Record updates+r1' = r1{ i = 10 }+r2' = r2{ c = 'a', i = 20 }+r'' = r'{ i = 123 }+ main = do+ -- print updated records first to show that old records are preserved+ print r1'+ print r2'+ print r''+ print r1 printS (show (i r1)) printS (show (c r1))@@ -42,5 +61,5 @@ printS :: String -> Fay () printS = ffi "console.log(%1)" -print :: a -> Fay ()+print :: Foreign f => f -> Fay () print = ffi "console.log(%1)"
tests/RecDecl.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecDecl = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,9 +468,71 @@ * Application code. */ -var $_R = function(i,c){this.i = i;this.c = c;};var R = function(i){return function(c){return new $(function(){return new $_R(i,c);});};};var i = function(x){return new $(function(){return _(x).i;});};var c = function(x){return new $(function(){return _(x).c;});};var $_S = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var S = function(slot1){return function(slot2){return new $(function(){return new $_S(slot1,slot2);});};};var r1 = new $(function(){var r = new $_R();r.i = 1;r.c = "a";return r;});var r2 = new $(function(){var r = new $_R();r.c = "b";r.i = 2;return r;});var r$39$ = new $(function(){var r = new $_R();r.c = "b";return r;});var r3 = new $(function(){return _(_(R)(3))("c");});var s1 = new $(function(){return _(_(S)(1))("a");});var $_X = function(_x1,_x2){this._x1 = _x1;this._x2 = _x2;};var X = function(_x1){return function(_x2){return new $(function(){return new $_X(_x1,_x2);});};};var _x1 = function(x){return new $(function(){return _(x)._x1;});};var _x2 = function(x){return new $(function(){return _(x)._x2;});};var x1 = new $(function(){return _(_(X)(1))(2);});var x2 = new $(function(){var x = new $_X();x._x1 = 1;x._x2 = 2;return x;});var main = new $(function(){return _(_($62$$62$)(_(print)(r1)))(_(_($62$$62$)(_(printS)(_(show)(_(i)(r1)))))(_(_($62$$62$)(_(printS)(_(show)(_(c)(r1)))))(_(_($62$$62$)(_(print)(r2)))(_(_($62$$62$)(_(print)(r$39$)))(_(_($62$$62$)(_(print)(r3)))(_(_($62$$62$)(_(print)(s1)))(_(_($62$$62$)(_(print)(x1)))(_(print)(x2)))))))));});var printS = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["unknown"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_X) {return {"instance": "X","_x1": Fay$$fayToJs(["user","Int",[]],_(_obj._x1)),"_x2": Fay$$fayToJs(["user","Int",[]],_(_obj._x2))};}if (_obj instanceof $_S) {return {"instance": "S","slot1": Fay$$fayToJs(["double"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Char",[]],_(_obj.slot2))};}if (_obj instanceof $_R) {return {"instance": "R","i": Fay$$fayToJs(["double"],_(_obj.i)),"c": Fay$$fayToJs(["user","Char",[]],_(_obj.c))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "X") {return new $_X(Fay$$jsToFay(["user","Int",[]],obj["_x1"]),Fay$$jsToFay(["user","Int",[]],obj["_x2"]));}if (obj["instance"] === "S") {return new $_S(Fay$$jsToFay(["double"],obj["slot1"]),Fay$$jsToFay(["user","Char",[]],obj["slot2"]));}if (obj["instance"] === "R") {return new $_R(Fay$$jsToFay(["double"],obj["i"]),Fay$$jsToFay(["user","Char",[]],obj["c"]));}return obj;};+var $36$_R = function(i,c){this.i = i;this.c = c;};var R = function(i){return function(c){return new $(function(){return new $36$_R(i,c);});};};var i = function(x){return new $(function(){return _(x).i;});};var c = function(x){return new $(function(){return _(x).c;});};var $36$_S = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var S = function(slot1){return function(slot2){return new $(function(){return new $36$_S(slot1,slot2);});};};var r1 = new $(function(){var r = new $36$_R();r.i = 1;r.c = "a";return r;});var r2 = new $(function(){var r = new $36$_R();r.c = "b";r.i = 2;return r;});var r$39$ = new $(function(){var r = new $36$_R();r.c = "b";return r;});var r3 = new $(function(){return _(_(R)(3))("c");});var s1 = new $(function(){return _(_(S)(1))("a");});var $36$_X = function(_x1,_x2){this._x1 = _x1;this._x2 = _x2;};var X = function(_x1){return function(_x2){return new $(function(){return new $36$_X(_x1,_x2);});};};var _x1 = function(x){return new $(function(){return _(x)._x1;});};var _x2 = function(x){return new $(function(){return _(x)._x2;});};var x1 = new $(function(){return _(_(X)(1))(2);});var x2 = new $(function(){var x = new $36$_X();x._x1 = 1;x._x2 = 2;return x;});var r1$39$ = new $(function(){var $36$_record_to_update = Object.create(_(r1));$36$_record_to_update.i = 10;return $36$_record_to_update;});var r2$39$ = new $(function(){var $36$_record_to_update = Object.create(_(r2));$36$_record_to_update.c = "a";$36$_record_to_update.i = 20;return $36$_record_to_update;});var r$39$$39$ = new $(function(){var $36$_record_to_update = Object.create(_(r$39$));$36$_record_to_update.i = 123;return $36$_record_to_update;});var main = new $(function(){return _(_($62$$62$)(_(print)(r1$39$)))(_(_($62$$62$)(_(print)(r2$39$)))(_(_($62$$62$)(_(print)(r$39$$39$)))(_(_($62$$62$)(_(print)(r1)))(_(_($62$$62$)(_(printS)(_(show)(_(i)(r1)))))(_(_($62$$62$)(_(printS)(_(show)(_(c)(r1)))))(_(_($62$$62$)(_(print)(r2)))(_(_($62$$62$)(_(print)(r$39$)))(_(_($62$$62$)(_(print)(r3)))(_(_($62$$62$)(_(print)(s1)))(_(_($62$$62$)(_(print)(x1)))(_(print)(x2))))))))))));});var printS = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["unknown"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_X) {return {"instance": "X","_x1": Fay$$fayToJs(["int"],_(_obj._x1)),"_x2": Fay$$fayToJs(["int"],_(_obj._x2))};}if (_obj instanceof $36$_S) {return {"instance": "S","slot1": Fay$$fayToJs(["double"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Char",[]],_(_obj.slot2))};}if (_obj instanceof $36$_R) {return {"instance": "R","i": Fay$$fayToJs(["double"],_(_obj.i)),"c": Fay$$fayToJs(["user","Char",[]],_(_obj.c))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "X") {return new $36$_X(Fay$$jsToFay(["int"],obj["_x1"]),Fay$$jsToFay(["int"],obj["_x2"]));}if (obj["instance"] === "S") {return new $36$_S(Fay$$jsToFay(["double"],obj["slot1"]),Fay$$jsToFay(["user","Char",[]],obj["slot2"]));}if (obj["instance"] === "R") {return new $36$_R(Fay$$jsToFay(["double"],obj["i"]),Fay$$jsToFay(["user","Char",[]],obj["c"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print;+this.printS = printS; this.main = main;+this.r$39$$39$ = r$39$$39$;+this.r2$39$ = r2$39$;+this.r1$39$ = r1$39$;+this.x2 = x2;+this.x1 = x1;+this._x2 = _x2;+this._x1 = _x1;+this.s1 = s1;+this.r3 = r3;+this.r$39$ = r$39$;+this.r2 = r2;+this.r1 = r1;+this.c = c;+this.i = i; // Built-ins this._ = _;@@ -429,6 +542,6 @@ }; ;-var main = new Main();+var main = new RecDecl(); main._(main.main);
tests/RecordImport_Export.hs view
@@ -2,4 +2,6 @@ module RecordImport_Export where +import Language.Fay.Prelude+ data R = R Integer
tests/RecordImport_Export.js view
@@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var $_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $_R(slot1);});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_R) {return {"instance": "R","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $_R(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}return obj;};+var $36$_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $36$_R(slot1);});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_R) {return {"instance": "R","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $36$_R(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;
tests/RecordImport_Import.js view
@@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var $_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $_R(slot1);});};var f = function($_a){return new $(function(){if (_($_a) instanceof $_R) {var i = _($_a).slot1;return _(R)(i);}throw ["unhandled case in Ident \"f\"",[$_a]];});};var showR = function($_a){return new $(function(){if (_($_a) instanceof $_R) {var i = _($_a).slot1;return _(_($43$$43$)(Fay$$list("R ")))(_(show)(i));}throw ["unhandled case in Ident \"showR\"",[$_a]];});};var printS = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var main = new $(function(){return _(_($36$)(printS))(_(_($36$)(showR))(_(R)(1)));});var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_R) {return {"instance": "R","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $_R(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}return obj;};+var $36$_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $36$_R(slot1);});};var f = function($36$_a){return new $(function(){if (_($36$_a) instanceof $36$_R) {var i = _($36$_a).slot1;return _(R)(i);}throw ["unhandled case in Ident \"f\"",[$36$_a]];});};var showR = function($36$_a){return new $(function(){if (_($36$_a) instanceof $36$_R) {var i = _($36$_a).slot1;return _(_($43$$43$)(Fay$$list("R ")))(_(show)(i));}throw ["unhandled case in Ident \"showR\"",[$36$_a]];});};var printS = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var main = new $(function(){return _(_($36$)(printS))(_(_($36$)(showR))(_(R)(1)));});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_R) {return {"instance": "R","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $36$_R(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;
tests/String.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module String where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print "Hello, World!" print :: String -> Fay ()
tests/String.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var String = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(Fay$$list("Hello, World!"));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(Fay$$list("Hello, World!"));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new String(); main._(main.main);
tests/asPatternMatch.hs view
@@ -1,8 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} -module Test where---- | As pattern matches+module AsPatternMatch where import Language.Fay.FFI import Language.Fay.Prelude
tests/asPatternMatch.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Test = function(){+var AsPatternMatch = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var matchSame = function($_a){return new $(function(){var x = $_a;var y = $_a;return Fay$$list([x,y]);return Fay$$list([x,y]);throw ["unhandled case in Ident \"matchSame\"",[$_a]];});};var matchSplit = function($_a){return new $(function(){var x = $_a;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var y = $_$_a.car;var z = $_$_a.cdr;return Fay$$list([x,y,z]);}return Fay$$list([x,y,z]);throw ["unhandled case in Ident \"matchSplit\"",[$_a]];});};var matchNested = function($_a){return new $(function(){var a = Fay$$index(0)(_($_a));var b = Fay$$index(1)(_($_a));var $tmp = _(Fay$$index(1)(_($_a)));if ($tmp instanceof Fay$$Cons) {var x = $tmp.car;var xs = $tmp.cdr;return Fay$$list([b,x,xs]);}return Fay$$list([b,x,xs]);throw ["unhandled case in Ident \"matchNested\"",[$_a]];});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var main = new $(function(){return _(_($62$$62$)(_(_($36$)(print))(_(_($36$)(show))(_(matchSame)(Fay$$list([1,2,3]))))))(_(_($62$$62$)(_(_($36$)(print))(_(_($36$)(show))(_(matchSplit)(Fay$$list([1,2,3]))))))(_(_($36$)(print))(_(_($36$)(show))(_(matchNested)(Fay$$list([1,Fay$$list([1,2,3])]))))));});var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var matchSame = function($36$_a){return new $(function(){var x = $36$_a;var y = $36$_a;return Fay$$list([x,y]);return Fay$$list([x,y]);throw ["unhandled case in Ident \"matchSame\"",[$36$_a]];});};var matchSplit = function($36$_a){return new $(function(){var x = $36$_a;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var y = $36$_$36$_a.car;var z = $36$_$36$_a.cdr;return Fay$$list([x,y,z]);}return Fay$$list([x,y,z]);throw ["unhandled case in Ident \"matchSplit\"",[$36$_a]];});};var matchNested = function($36$_a){return new $(function(){var a = Fay$$index(0)(_($36$_a));var b = Fay$$index(1)(_($36$_a));var $tmp = _(Fay$$index(1)(_($36$_a)));if ($tmp instanceof Fay$$Cons) {var x = $tmp.car;var xs = $tmp.cdr;return Fay$$list([b,x,xs]);}return Fay$$list([b,x,xs]);throw ["unhandled case in Ident \"matchNested\"",[$36$_a]];});};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var main = new $(function(){return _(_($62$$62$)(_(_($36$)(print))(_(_($36$)(show))(_(matchSame)(Fay$$list([1,2,3]))))))(_(_($62$$62$)(_(_($36$)(print))(_(_($36$)(show))(_(matchSplit)(Fay$$list([1,2,3]))))))(_(_($36$)(print))(_(_($36$)(show))(_(matchNested)(Fay$$list([1,Fay$$list([1,2,3])]))))));});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -476,6 +530,6 @@ }; ;-var main = new Test();+var main = new AsPatternMatch(); main._(main.main);
tests/basicFunctions.hs view
@@ -1,11 +1,16 @@ {-# LANGUAGE NoImplicitPrelude #-} -main = print (concat ["Hello, ","World!"])+module BasicFunctions where -concat = foldr append []+import Language.Fay.FFI+import Language.Fay.Prelude -foldr f z [] = z-foldr f z (x:xs) = f x (foldr f z xs)+main = print (concat' ["Hello, ","World!"])++concat' = foldr' append []++foldr' f z [] = z+foldr' f z (x:xs) = f x (foldr f z xs) append (x:xs) ys = x : append xs ys append [] ys = ys
tests/basicFunctions.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var BasicFunctions = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,58 @@ * Application code. */ -var main = new $(function(){return _(print)(_(concat)(Fay$$list([Fay$$list("Hello, "),Fay$$list("World!")])));});var concat = new $(function(){return _(_(foldr)(append))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;var f = $_a;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var append = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(append)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"append\"",[$_a,$_b]];});};};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(concat$39$)(Fay$$list([Fay$$list("Hello, "),Fay$$list("World!")])));});var concat$39$ = new $(function(){return _(_(foldr$39$)(append))(null);});var foldr$39$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;var f = $36$_a;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr'\"",[$36$_a,$36$_b,$36$_c]];});};};};var append = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(append)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"append\"",[$36$_a,$36$_b]];});};};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print;+this.append = append;+this.foldr$39$ = foldr$39$;+this.concat$39$ = concat$39$; this.main = main; // Built-ins@@ -429,6 +530,6 @@ }; ;-var main = new Main();+var main = new BasicFunctions(); main._(main.main);
tests/case.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Case where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (case True of True -> "Hello!" False -> "Ney!")
tests/case.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Case = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)((function($_true){if (_($_true) === true) {return Fay$$list("Hello!");}if (_($_true) === false) {return Fay$$list("Ney!");}return (function(){ throw (["unhandled case",$_true]); })();})(true));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)((function($tmp){if (_($tmp) === true) {return Fay$$list("Hello!");}if (_($tmp) === false) {return Fay$$list("Ney!");}return (function(){ throw (["unhandled case",$tmp]); })();})(true));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Case(); main._(main.main);
tests/case2.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Case2 where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (case False of True -> "Hello!" False -> "Ney!")
tests/case2.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Case2 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)((function($_false){if (_($_false) === true) {return Fay$$list("Hello!");}if (_($_false) === false) {return Fay$$list("Ney!");}return (function(){ throw (["unhandled case",$_false]); })();})(false));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)((function($tmp){if (_($tmp) === true) {return Fay$$list("Hello!");}if (_($tmp) === false) {return Fay$$list("Ney!");}return (function(){ throw (["unhandled case",$tmp]); })();})(false));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Case2(); main._(main.main);
tests/caseList.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module CaseList where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (case [1,2,3,4,5] of [1,2,3,4,6] -> "6!" [1,2,4,2,4] -> "a!"
tests/caseList.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var CaseList = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)((function($tmp){if (_(Fay$$index(0)(_($tmp))) === 1) {if (_(Fay$$index(1)(_($tmp))) === 2) {if (_(Fay$$index(2)(_($tmp))) === 3) {if (_(Fay$$index(3)(_($tmp))) === 4) {if (_(Fay$$index(4)(_($tmp))) === 6) {return Fay$$list("6!");}}}if (_(Fay$$index(2)(_($tmp))) === 4) {if (_(Fay$$index(3)(_($tmp))) === 2) {if (_(Fay$$index(4)(_($tmp))) === 4) {return Fay$$list("a!");}}}if (_(Fay$$index(2)(_($tmp))) === 3) {if (_(Fay$$index(3)(_($tmp))) === 4) {if (_(Fay$$index(4)(_($tmp))) === 5) {return Fay$$list("OK.");}}}}}return Fay$$list("Broken.");})(Fay$$list([1,2,3,4,5])));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)((function($tmp){if (_(Fay$$index(0)(_($tmp))) === 1) {if (_(Fay$$index(1)(_($tmp))) === 2) {if (_(Fay$$index(2)(_($tmp))) === 3) {if (_(Fay$$index(3)(_($tmp))) === 4) {if (_(Fay$$index(4)(_($tmp))) === 6) {return Fay$$list("6!");}}}if (_(Fay$$index(2)(_($tmp))) === 4) {if (_(Fay$$index(3)(_($tmp))) === 2) {if (_(Fay$$index(4)(_($tmp))) === 4) {return Fay$$list("a!");}}}if (_(Fay$$index(2)(_($tmp))) === 3) {if (_(Fay$$index(3)(_($tmp))) === 4) {if (_(Fay$$index(4)(_($tmp))) === 5) {return Fay$$list("OK.");}}}}}return Fay$$list("Broken.");})(Fay$$list([1,2,3,4,5])));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new CaseList(); main._(main.main);
tests/caseWildcard.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module CaseWildCard where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (case False of True -> "Hello!" _ -> "Ney!")
tests/caseWildcard.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var CaseWildCard = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)((function($_false){if (_($_false) === true) {return Fay$$list("Hello!");}return Fay$$list("Ney!");})(false));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)((function($tmp){if (_($tmp) === true) {return Fay$$list("Hello!");}return Fay$$list("Ney!");})(false));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new CaseWildCard(); main._(main.main);
tests/do.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Do where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = do print "Hello,"; print "World!" print :: String -> Fay ()
tests/do.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Do = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$)(_(print)(Fay$$list("Hello,"))))(_(print)(Fay$$list("World!")));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$)(_(print)(Fay$$list("Hello,"))))(_(print)(Fay$$list("World!")));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Do(); main._(main.main);
tests/doAssingPatternMatch.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module DoAssignPatternMatch where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = do [1,2] <- return [1,2] print "OK."
tests/doAssingPatternMatch.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var DoAssignPatternMatch = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$$61$)(_($_return)(Fay$$list([1,2]))))(function($_a){if (_(Fay$$index(0)(_($_a))) === 1) {if (_(Fay$$index(1)(_($_a))) === 2) {return _(print)(Fay$$list("OK."));}}throw ["unhandled case",$_a];});});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$$61$)(_($_return)(Fay$$list([1,2]))))(function($36$_a){if (_(Fay$$index(0)(_($36$_a))) === 1) {if (_(Fay$$index(1)(_($36$_a))) === 2) {return _(print)(Fay$$list("OK."));}}throw ["unhandled case",$36$_a];});});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new DoAssignPatternMatch(); main._(main.main);
tests/doBindAssign.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module DoBindAssign where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = do x <- return "Hello, World!" >>= return print x
tests/doBindAssign.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var DoBindAssign = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$$61$)(_(_($62$$62$$61$)(_($_return)(Fay$$list("Hello, World!"))))($_return)))(function($_a){var x = $_a;return _(print)(x);});});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$$61$)(_(_($62$$62$$61$)(_($_return)(Fay$$list("Hello, World!"))))($_return)))(function($36$_a){var x = $36$_a;return _(print)(x);});});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new DoBindAssign(); main._(main.main);
tests/emptyMain.hs view
@@ -1,3 +1,8 @@ {-# LANGUAGE NoImplicitPrelude #-} +module EmptyMain where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = return ()
tests/emptyMain.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var EmptyMain = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,54 @@ * Application code. */ -var main = new $(function(){return _($_return)(Fay$$unit);});var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _($_return)(Fay$$unit);});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show; this.main = main; // Built-ins@@ -429,6 +526,6 @@ }; ;-var main = new Main();+var main = new EmptyMain(); main._(main.main);
tests/fix.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Fix where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print (head (tail (fix (\xs -> 123 : xs)))) print :: Double -> Fay ()
tests/fix.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Fix = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,58 @@ * Application code. */ -var main = new $(function(){return _(print)(_(head)(_(tail)(_(fix)(function($_a){var xs = $_a;return _(_(Fay$$cons)(123))(xs);}))));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var head = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return x;}throw ["unhandled case in Ident \"head\"",[$_a]];});};var fix = function($_a){return new $(function(){var f = $_a;return (function(){var x = new $(function(){return _(f)(x);});return x;})();});};var tail = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var xs = $_$_a.cdr;return xs;}throw ["unhandled case in Ident \"tail\"",[$_a]];});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(head)(_(tail)(_(fix)(function($36$_a){var xs = $36$_a;return _(_(Fay$$cons)(123))(xs);}))));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var head = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return x;}throw ["unhandled case in Ident \"head\"",[$36$_a]];});};var fix = function($36$_a){return new $(function(){var f = $36$_a;return (function(){var x = new $(function(){return _(f)(x);});return x;})();});};var tail = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return xs;}throw ["unhandled case in Ident \"tail\"",[$36$_a]];});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.tail = tail;+this.fix = fix;+this.head = head;+this.print = print; this.main = main; // Built-ins@@ -429,6 +530,6 @@ }; ;-var main = new Main();+var main = new Fix(); main._(main.main);
tests/fromInteger.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} -module Test where+module FromInteger where import Language.Fay.FFI import Language.Fay.Prelude
tests/fromInteger.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Test = function(){+var FromInteger = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var main = new $(function(){return _(_($36$)(print))(_(_($36$)(show))(_(fromInteger)(5)));});var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var main = new $(function(){return _(_($36$)(print))(_(_($36$)(show))(_(fromInteger)(5)));});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -473,6 +527,6 @@ }; ;-var main = new Test();+var main = new FromInteger(); main._(main.main);
tests/infixDataConst view
@@ -1,1 +1,3 @@-{"instance":"$58$$61$$62$","slot1":{"instance":"InfixConst1","slot1":123,"slot2":123},"slot2":{"instance":"InfixConst2","slot1":false,"slot2":true}}+{ instance: '$58$$61$$62$',+ slot1: { instance: 'InfixConst1', slot1: 123, slot2: 123 },+ slot2: { instance: 'InfixConst2', slot1: false, slot2: true } }
tests/infixDataConst.hs view
@@ -1,21 +1,23 @@ {-# LANGUAGE NoImplicitPrelude #-} -import Language.Fay.FFI-import Language.Fay.Prelude+module Test where +import Language.Fay.FFI+import Language.Fay.Prelude + data Ty1 = Integer `InfixConst1` Integer- deriving Show+instance Foreign Ty1 data Ty2 = Bool `InfixConst2` Bool- deriving Show+instance Foreign Ty2 data Ty3 = Ty1 :=> Ty2+instance Foreign Ty3 t = (123 `InfixConst1` 123) :=> (False `InfixConst2` True) -main = do- print (show t)+main = print t -print :: String -> Fay ()+print :: Ty3 -> Fay () print = ffi "console.log(%1)"
tests/infixDataConst.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Test = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,9 +468,57 @@ * Application code. */ -var $_InfixConst1 = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var InfixConst1 = function(slot1){return function(slot2){return new $(function(){return new $_InfixConst1(slot1,slot2);});};};var $_InfixConst2 = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var InfixConst2 = function(slot1){return function(slot2){return new $(function(){return new $_InfixConst2(slot1,slot2);});};};var $_$58$$61$$62$ = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var $58$$61$$62$ = function(slot1){return function(slot2){return new $(function(){return new $_$58$$61$$62$(slot1,slot2);});};};var t = new $(function(){return _(_($58$$61$$62$)(_(_(InfixConst1)(123))(123)))(_(_(InfixConst2)(false))(true));});var main = new $(function(){return _(print)(_(show)(t));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_$58$$61$$62$) {return {"instance": "$58$$61$$62$","slot1": Fay$$fayToJs(["user","Ty1",[]],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Ty2",[]],_(_obj.slot2))};}if (_obj instanceof $_InfixConst2) {return {"instance": "InfixConst2","slot1": Fay$$fayToJs(["bool"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["bool"],_(_obj.slot2))};}if (_obj instanceof $_InfixConst1) {return {"instance": "InfixConst1","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot2))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "$58$$61$$62$") {return new $_$58$$61$$62$(Fay$$jsToFay(["user","Ty1",[]],obj["slot1"]),Fay$$jsToFay(["user","Ty2",[]],obj["slot2"]));}if (obj["instance"] === "InfixConst2") {return new $_InfixConst2(Fay$$jsToFay(["bool"],obj["slot1"]),Fay$$jsToFay(["bool"],obj["slot2"]));}if (obj["instance"] === "InfixConst1") {return new $_InfixConst1(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]),Fay$$jsToFay(["user","Integer",[]],obj["slot2"]));}return obj;};+var $36$_InfixConst1 = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var InfixConst1 = function(slot1){return function(slot2){return new $(function(){return new $36$_InfixConst1(slot1,slot2);});};};var $36$_InfixConst2 = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var InfixConst2 = function(slot1){return function(slot2){return new $(function(){return new $36$_InfixConst2(slot1,slot2);});};};var $36$_$36$58$36$$36$61$36$$36$62$36$ = function(slot1,slot2){this.slot1 = slot1;this.slot2 = slot2;};var $58$$61$$62$ = function(slot1){return function(slot2){return new $(function(){return new $36$_$36$58$36$$36$61$36$$36$62$36$(slot1,slot2);});};};var t = new $(function(){return _(_($58$$61$$62$)(_(_(InfixConst1)(123))(123)))(_(_(InfixConst2)(false))(true));});var main = new $(function(){return _(print)(t);});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["user","Ty3",[]],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_$36$58$36$$36$61$36$$36$62$36$) {return {"instance": "$58$$61$$62$","slot1": Fay$$fayToJs(["user","Ty1",[]],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Ty2",[]],_(_obj.slot2))};}if (_obj instanceof $36$_InfixConst2) {return {"instance": "InfixConst2","slot1": Fay$$fayToJs(["bool"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["bool"],_(_obj.slot2))};}if (_obj instanceof $36$_InfixConst1) {return {"instance": "InfixConst1","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1)),"slot2": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot2))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "$58$$61$$62$") {return new $36$_$36$58$36$$36$61$36$$36$62$36$(Fay$$jsToFay(["user","Ty1",[]],obj["slot1"]),Fay$$jsToFay(["user","Ty2",[]],obj["slot2"]));}if (obj["instance"] === "InfixConst2") {return new $36$_InfixConst2(Fay$$jsToFay(["bool"],obj["slot1"]),Fay$$jsToFay(["bool"],obj["slot2"]));}if (obj["instance"] === "InfixConst1") {return new $36$_InfixConst1(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]),Fay$$jsToFay(["user","Integer",[]],obj["slot2"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main;+this.t = t; // Built-ins this._ = _;@@ -429,6 +528,6 @@ }; ;-var main = new Main();+var main = new Test(); main._(main.main);
+ tests/ints view
@@ -0,0 +1,1 @@+123
+ tests/ints.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Ints where++import Language.Fay.FFI+import Language.Fay.Prelude++main = do+ print 123++-- | Print using console.log.+print :: Int -> Fay ()+print = ffi "console.log(%1)"
tests/mutableReference.hs view
@@ -3,7 +3,7 @@ {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE NoImplicitPrelude #-} -module Ref where+module MutableReference where import Language.Fay.FFI import Language.Fay.Prelude
tests/mutableReference.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Ref = function(){+var MutableReference = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$$61$)(_(newRef)(Fay$$list("Hello, World!"))))(function($_a){var ref = $_a;return _(_($62$$62$$61$)(_(readRef)(ref)))(function($_a){var x = $_a;return _(_($62$$62$)(_(_(writeRef)(ref))(Fay$$list("Hai!"))))(_(_($62$$62$$61$)(_(readRef)(ref)))(print));});});});var newRef = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["user","Ref",[["unknown"]]]]],new Fay$$Ref(Fay$$fayToJs(["unknown"],$_a)));});};var writeRef = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],Fay$$writeRef(Fay$$fayToJs(["user","Ref",[["unknown"]]],$_a),Fay$$fayToJs(["unknown"],$_b)));});};};var readRef = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],Fay$$readRef(Fay$$fayToJs(["user","Ref",[["unknown"]]],$_a)));});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$$61$)(_(newRef)(Fay$$list("Hello, World!"))))(function($36$_a){var ref = $36$_a;return _(_($62$$62$$61$)(_(readRef)(ref)))(function($36$_a){var x = $36$_a;return _(_($62$$62$)(_(_(writeRef)(ref))(Fay$$list("Hai!"))))(_(_($62$$62$$61$)(_(readRef)(ref)))(print));});});});var newRef = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["user","Ref",[["unknown"]]]]],new Fay$$Ref(Fay$$fayToJs(["unknown"],$36$_a)));});};var writeRef = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],Fay$$writeRef(Fay$$fayToJs(["user","Ref",[["unknown"]]],$36$_a),Fay$$fayToJs(["unknown"],$36$_b)));});};};var readRef = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],Fay$$readRef(Fay$$fayToJs(["user","Ref",[["unknown"]]],$36$_a)));});};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -476,6 +530,6 @@ }; ;-var main = new Ref();+var main = new MutableReference(); main._(main.main);
tests/patternGuards view
@@ -1,3 +1,3 @@-[true,false]-[2,1,0]-[true,false]+[ true, false ]+[ 2, 1, 0 ]+[ true, false ]
tests/patternGuards.hs view
@@ -1,6 +1,8 @@+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE NoImplicitPrelude #-}-module Test where +module PatternGuards where+ -- | As pattern matches import Language.Fay.FFI@@ -20,14 +22,13 @@ -- Not called, throws "non-exhaustive guard" nonExhaustive x | x > 1 = True -print :: String -> Fay ()-print = ffi "console.log(%1)"+printD :: [Double] -> Fay ()+printD = ffi "console.log(%1)"+printB :: [Bool] -> Fay ()+printB = ffi "console.log(%1)" main :: Fay () main = do- print $ showList $ (isPositive 1, isPositive 0)- print $ showList $ (threeConds 3, threeConds 1, threeConds 0)- print $ showList $ (withOtherwise 2, withOtherwise 0)--showList :: Foreign a => [a] -> String-showList = ffi "JSON.stringify(%1)"+ printB [isPositive 1, isPositive 0]+ printD [threeConds 3, threeConds 1, threeConds 0]+ printB [withOtherwise 2, withOtherwise 0]
tests/patternGuards.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Test = function(){+var PatternGuards = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var isPositive = function($_a){return new $(function(){var x = $_a;return _(_(x) > 0) ? true : _(_(_(Fay$$lte)(x))(0)) ? false : (function(){ throw ("Non-exhaustive guards"); })();});};var threeConds = function($_a){return new $(function(){var x = $_a;return _(_(x) > 1) ? 2 : _(_(_(Fay$$eq)(x))(1)) ? 1 : _(_(x) < 1) ? 0 : (function(){ throw ("Non-exhaustive guards"); })();});};var withOtherwise = function($_a){return new $(function(){var x = $_a;return _(_(x) > 1) ? true : false;});};var nonExhaustive = function($_a){return new $(function(){var x = $_a;return _(_(x) > 1) ? true : (function(){ throw ("Non-exhaustive guards"); })();});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var main = new $(function(){return _(_($62$$62$)(_(_($36$)(print))(_(_($36$)(showList))(Fay$$list([_(isPositive)(1),_(isPositive)(0)])))))(_(_($62$$62$)(_(_($36$)(print))(_(_($36$)(showList))(Fay$$list([_(threeConds)(3),_(threeConds)(1),_(threeConds)(0)])))))(_(_($36$)(print))(_(_($36$)(showList))(Fay$$list([_(withOtherwise)(2),_(withOtherwise)(0)])))));});var showList = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["list",[["unknown"]]],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var isPositive = function($36$_a){return new $(function(){var x = $36$_a;return _(_(Fay$$gt)(_(x))(0)) ? true : _(_(_(Fay$$lte)(x))(0)) ? false : (function(){ throw ("Non-exhaustive guards"); })();});};var threeConds = function($36$_a){return new $(function(){var x = $36$_a;return _(_(Fay$$gt)(_(x))(1)) ? 2 : _(_(_(Fay$$eq)(x))(1)) ? 1 : _(_(Fay$$lt)(_(x))(1)) ? 0 : (function(){ throw ("Non-exhaustive guards"); })();});};var withOtherwise = function($36$_a){return new $(function(){var x = $36$_a;return _(_(Fay$$gt)(_(x))(1)) ? true : false;});};var nonExhaustive = function($36$_a){return new $(function(){var x = $36$_a;return _(_(Fay$$gt)(_(x))(1)) ? true : (function(){ throw ("Non-exhaustive guards"); })();});};var printD = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["list",[["double"]]],$36$_a)));});};var printB = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["list",[["bool"]]],$36$_a)));});};var main = new $(function(){return _(_($62$$62$)(_(printB)(Fay$$list([_(isPositive)(1),_(isPositive)(0)]))))(_(_($62$$62$)(_(printD)(Fay$$list([_(threeConds)(3),_(threeConds)(1),_(threeConds)(0)]))))(_(printB)(Fay$$list([_(withOtherwise)(2),_(withOtherwise)(0)]))));});var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;@@ -462,9 +516,9 @@ this.fromRational = fromRational; this.fromInteger = fromInteger; this.show = show;-this.showList = showList; this.main = main;-this.print = print;+this.printB = printB;+this.printD = printD; this.nonExhaustive = nonExhaustive; this.withOtherwise = withOtherwise; this.threeConds = threeConds;@@ -478,6 +532,6 @@ }; ;-var main = new Test();+var main = new PatternGuards(); main._(main.main);
tests/patternMatchFail.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module PatternMatchFail where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print ((\a 'a' -> "OK.") 0 'b') print :: String -> Fay ()
tests/patternMatchFail.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var PatternMatchFail = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(print)(_(_(function($_a){var a = $_a;return function($_b){if (_($_b) === "a") {return Fay$$list("OK.");}throw ["unhandled case",$_b];};throw ["unhandled case",$_a];})(0))("b"));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(_(function($36$_a){var a = $36$_a;return function($36$_b){if (_($36$_b) === "a") {return Fay$$list("OK.");}throw ["unhandled case",$36$_b];};throw ["unhandled case",$36$_a];})(0))("b"));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new PatternMatchFail(); main._(main.main);
tests/recordFunctionPatternMatch.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecordFunctionPatternMatch where++import Language.Fay.FFI+import Language.Fay.Prelude+ data Person = Person String String Int main = print (foo (Person "Chris" "Done" 14))
tests/recordFunctionPatternMatch.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecordFunctionPatternMatch = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,56 @@ * Application code. */ -var $_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)(_(foo)(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var foo = function($_a){return new $(function(){if (_($_a) instanceof $_Person) {if (Fay$$equal(_($_a).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($_a).slot2,Fay$$list("Done"))) {if (_(_($_a).slot3) === 13) {return Fay$$list("Foo!");}}if (Fay$$equal(_($_a).slot2,Fay$$list("Barf"))) {if (_(_($_a).slot3) === 14) {return Fay$$list("Bar!");}}if (Fay$$equal(_($_a).slot2,Fay$$list("Done"))) {if (_(_($_a).slot3) === 14) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["user","Int",[]],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["user","Int",[]],obj["slot3"]));}return obj;};+var $36$_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $36$_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)(_(foo)(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var foo = function($36$_a){return new $(function(){if (_($36$_a) instanceof $36$_Person) {if (Fay$$equal(_($36$_a).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($36$_a).slot2,Fay$$list("Done"))) {if (_(_($36$_a).slot3) === 13) {return Fay$$list("Foo!");}}if (Fay$$equal(_($36$_a).slot2,Fay$$list("Barf"))) {if (_(_($36$_a).slot3) === 14) {return Fay$$list("Bar!");}}if (Fay$$equal(_($36$_a).slot2,Fay$$list("Done"))) {if (_(_($36$_a).slot3) === 14) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");});};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["int"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $36$_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["int"],obj["slot3"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print;+this.foo = foo; this.main = main; // Built-ins@@ -429,6 +528,6 @@ }; ;-var main = new Main();+var main = new RecordFunctionPatternMatch(); main._(main.main);
tests/recordPatternMatch.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecordPatternMatch where++import Language.Fay.FFI+import Language.Fay.Prelude+ data Person = Person String String Int main = print (case Person "Chris" "Done" 14 of
tests/recordPatternMatch.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecordPatternMatch = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var $_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)((function($tmp){if (_($tmp) instanceof $_Person) {if (Fay$$equal(_($tmp).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 13) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");})(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["user","Int",[]],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["user","Int",[]],obj["slot3"]));}return obj;};+var $36$_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $36$_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)((function($tmp){if (_($tmp) instanceof $36$_Person) {if (Fay$$equal(_($tmp).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 13) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");})(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["int"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $36$_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["int"],obj["slot3"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new RecordPatternMatch(); main._(main.main);
tests/recordPatternMatch2.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecordPatternMatch2 where++import Language.Fay.FFI+import Language.Fay.Prelude+ data Person = Person String String Int main = print (case Person "Chris" "Done" 14 of
tests/recordPatternMatch2.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecordPatternMatch2 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var $_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)((function($tmp){if (_($tmp) instanceof $_Person) {if (Fay$$equal(_($tmp).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 13) {return Fay$$list("Foo!");}}if (Fay$$equal(_($tmp).slot2,Fay$$list("Barf"))) {if (_(_($tmp).slot3) === 14) {return Fay$$list("Bar!");}}if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 14) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");})(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["user","Int",[]],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["user","Int",[]],obj["slot3"]));}return obj;};+var $36$_Person = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $36$_Person(slot1,slot2,slot3);});};};};var main = new $(function(){return _(print)((function($tmp){if (_($tmp) instanceof $36$_Person) {if (Fay$$equal(_($tmp).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 13) {return Fay$$list("Foo!");}}if (Fay$$equal(_($tmp).slot2,Fay$$list("Barf"))) {if (_(_($tmp).slot3) === 14) {return Fay$$list("Bar!");}}if (Fay$$equal(_($tmp).slot2,Fay$$list("Done"))) {if (_(_($tmp).slot3) === 14) {return Fay$$list("Hello!");}}}}return Fay$$list("World!");})(_(_(_(Person)(Fay$$list("Chris")))(Fay$$list("Done")))(14)));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_Person) {return {"instance": "Person","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["int"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person") {return new $36$_Person(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["int"],obj["slot3"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new RecordPatternMatch2(); main._(main.main);
tests/recordUseBeforeDefine.hs view
@@ -1,15 +1,20 @@ {-# LANGUAGE NoImplicitPrelude #-} +module RecordUseBeforeDefine where++import Language.Fay.FFI+import Language.Fay.Prelude+ import Hierarchical.RecordDefined -f :: R -> Integer+f :: R -> Double f (R i) = i main = do print $ f (R 1) print $ g (Callback 1) -data R = R Integer+data R = R Double print :: Double -> Fay () print = ffi "console.log(%1)"
tests/recordUseBeforeDefine.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var RecordUseBeforeDefine = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,9 +468,57 @@ * Application code. */ -var $_Callback = function(slot1){this.slot1 = slot1;};var Callback = function(slot1){return new $(function(){return new $_Callback(slot1);});};var g = function($_a){return new $(function(){if (_($_a) instanceof $_Callback) {var a = _($_a).slot1;return a;}throw ["unhandled case in Ident \"g\"",[$_a]];});};var f = function($_a){return new $(function(){if (_($_a) instanceof $_R) {var i = _($_a).slot1;return i;}throw ["unhandled case in Ident \"f\"",[$_a]];});};var main = new $(function(){return _(_($62$$62$)(_(_($36$)(print))(_(f)(_(R)(1)))))(_(_($36$)(print))(_(g)(_(Callback)(1))));});var $_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $_R(slot1);});};var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_R) {return {"instance": "R","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}if (_obj instanceof $_Callback) {return {"instance": "Callback","slot1": Fay$$fayToJs(["user","Integer",[]],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $_R(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}if (obj["instance"] === "Callback") {return new $_Callback(Fay$$jsToFay(["user","Integer",[]],obj["slot1"]));}return obj;};+var $36$_Callback = function(slot1){this.slot1 = slot1;};var Callback = function(slot1){return new $(function(){return new $36$_Callback(slot1);});};var g = function($36$_a){return new $(function(){if (_($36$_a) instanceof $36$_Callback) {var a = _($36$_a).slot1;return a;}throw ["unhandled case in Ident \"g\"",[$36$_a]];});};var f = function($36$_a){return new $(function(){if (_($36$_a) instanceof $36$_R) {var i = _($36$_a).slot1;return i;}throw ["unhandled case in Ident \"f\"",[$36$_a]];});};var main = new $(function(){return _(_($62$$62$)(_(_($36$)(print))(_(f)(_(R)(1)))))(_(_($36$)(print))(_(g)(_(Callback)(1))));});var $36$_R = function(slot1){this.slot1 = slot1;};var R = function(slot1){return new $(function(){return new $36$_R(slot1);});};var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_R) {return {"instance": "R","slot1": Fay$$fayToJs(["double"],_(_obj.slot1))};}if (_obj instanceof $36$_Callback) {return {"instance": "Callback","slot1": Fay$$fayToJs(["double"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "R") {return new $36$_R(Fay$$jsToFay(["double"],obj["slot1"]));}if (obj["instance"] === "Callback") {return new $36$_Callback(Fay$$jsToFay(["double"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main;+this.f = f; // Built-ins this._ = _;@@ -429,6 +528,6 @@ }; ;-var main = new Main();+var main = new RecordUseBeforeDefine(); main._(main.main);
tests/records.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Records where++import Language.Fay.FFI+import Language.Fay.Prelude+ data Person1 = Person1 String String Int data Person2 = Person2 { fname :: String, sname :: String, age :: Int } data Person3 = Person3 { slot3 :: String, slot2 :: String, slot1 :: Int }
tests/records.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Records = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,9 +468,66 @@ * Application code. */ -var $_Person1 = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person1 = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $_Person1(slot1,slot2,slot3);});};};};var $_Person2 = function(fname,sname,age){this.fname = fname;this.sname = sname;this.age = age;};var Person2 = function(fname){return function(sname){return function(age){return new $(function(){return new $_Person2(fname,sname,age);});};};};var fname = function(x){return new $(function(){return _(x).fname;});};var sname = function(x){return new $(function(){return _(x).sname;});};var age = function(x){return new $(function(){return _(x).age;});};var $_Person3 = function(slot3,slot2,slot1){this.slot3 = slot3;this.slot2 = slot2;this.slot1 = slot1;};var Person3 = function(slot3){return function(slot2){return function(slot1){return new $(function(){return new $_Person3(slot3,slot2,slot1);});};};};var slot3 = function(x){return new $(function(){return _(x).slot3;});};var slot2 = function(x){return new $(function(){return _(x).slot2;});};var slot1 = function(x){return new $(function(){return _(x).slot1;});};var p1 = new $(function(){return _(_(_(Person1)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var p2 = new $(function(){return _(_(_(Person2)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var p2a = new $(function(){var person2 = new $_Person2();person2.fname = Fay$$list("Chris");person2.sname = Fay$$list("Done");person2.age = 13;return person2;});var p3 = new $(function(){return _(_(_(Person3)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var main = new $(function(){return _(_($62$$62$)(_(print)((function($_p1){if (_($_p1) instanceof $_Person1) {if (Fay$$equal(_($_p1).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($_p1).slot2,Fay$$list("Done"))) {if (_(_($_p1).slot3) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$_p1]); })();})(p1))))(_(_($62$$62$)(_(print)((function($_p2){if (_($_p2) instanceof $_Person2) {if (Fay$$equal(_($_p2).fname,Fay$$list("Chris"))) {if (Fay$$equal(_($_p2).sname,Fay$$list("Done"))) {if (_(_($_p2).age) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$_p2]); })();})(p2))))(_(_($62$$62$)(_(print)((function($_p2a){if (_($_p2a) instanceof $_Person2) {if (Fay$$equal(_($_p2a).fname,Fay$$list("Chris"))) {if (Fay$$equal(_($_p2a).sname,Fay$$list("Done"))) {if (_(_($_p2a).age) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$_p2a]); })();})(p2a))))(_(print)((function($_p3){if (_($_p3) instanceof $_Person3) {if (Fay$$equal(_($_p3).slot3,Fay$$list("Chris"))) {if (Fay$$equal(_($_p3).slot2,Fay$$list("Done"))) {if (_(_($_p3).slot1) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$_p3]); })();})(p3)))));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $_Person3) {return {"instance": "Person3","slot3": Fay$$fayToJs(["string"],_(_obj.slot3)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot1": Fay$$fayToJs(["user","Int",[]],_(_obj.slot1))};}if (_obj instanceof $_Person2) {return {"instance": "Person2","fname": Fay$$fayToJs(["string"],_(_obj.fname)),"sname": Fay$$fayToJs(["string"],_(_obj.sname)),"age": Fay$$fayToJs(["user","Int",[]],_(_obj.age))};}if (_obj instanceof $_Person1) {return {"instance": "Person1","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["user","Int",[]],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person3") {return new $_Person3(Fay$$jsToFay(["string"],obj["slot3"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["user","Int",[]],obj["slot1"]));}if (obj["instance"] === "Person2") {return new $_Person2(Fay$$jsToFay(["string"],obj["fname"]),Fay$$jsToFay(["string"],obj["sname"]),Fay$$jsToFay(["user","Int",[]],obj["age"]));}if (obj["instance"] === "Person1") {return new $_Person1(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["user","Int",[]],obj["slot3"]));}return obj;};+var $36$_Person1 = function(slot1,slot2,slot3){this.slot1 = slot1;this.slot2 = slot2;this.slot3 = slot3;};var Person1 = function(slot1){return function(slot2){return function(slot3){return new $(function(){return new $36$_Person1(slot1,slot2,slot3);});};};};var $36$_Person2 = function(fname,sname,age){this.fname = fname;this.sname = sname;this.age = age;};var Person2 = function(fname){return function(sname){return function(age){return new $(function(){return new $36$_Person2(fname,sname,age);});};};};var fname = function(x){return new $(function(){return _(x).fname;});};var sname = function(x){return new $(function(){return _(x).sname;});};var age = function(x){return new $(function(){return _(x).age;});};var $36$_Person3 = function(slot3,slot2,slot1){this.slot3 = slot3;this.slot2 = slot2;this.slot1 = slot1;};var Person3 = function(slot3){return function(slot2){return function(slot1){return new $(function(){return new $36$_Person3(slot3,slot2,slot1);});};};};var slot3 = function(x){return new $(function(){return _(x).slot3;});};var slot2 = function(x){return new $(function(){return _(x).slot2;});};var slot1 = function(x){return new $(function(){return _(x).slot1;});};var p1 = new $(function(){return _(_(_(Person1)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var p2 = new $(function(){return _(_(_(Person2)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var p2a = new $(function(){var person2 = new $36$_Person2();person2.fname = Fay$$list("Chris");person2.sname = Fay$$list("Done");person2.age = 13;return person2;});var p3 = new $(function(){return _(_(_(Person3)(Fay$$list("Chris")))(Fay$$list("Done")))(13);});var main = new $(function(){return _(_($62$$62$)(_(print)((function($36$_p1){if (_($36$_p1) instanceof $36$_Person1) {if (Fay$$equal(_($36$_p1).slot1,Fay$$list("Chris"))) {if (Fay$$equal(_($36$_p1).slot2,Fay$$list("Done"))) {if (_(_($36$_p1).slot3) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$36$_p1]); })();})(p1))))(_(_($62$$62$)(_(print)((function($36$_p2){if (_($36$_p2) instanceof $36$_Person2) {if (Fay$$equal(_($36$_p2).fname,Fay$$list("Chris"))) {if (Fay$$equal(_($36$_p2).sname,Fay$$list("Done"))) {if (_(_($36$_p2).age) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$36$_p2]); })();})(p2))))(_(_($62$$62$)(_(print)((function($36$_p2a){if (_($36$_p2a) instanceof $36$_Person2) {if (Fay$$equal(_($36$_p2a).fname,Fay$$list("Chris"))) {if (Fay$$equal(_($36$_p2a).sname,Fay$$list("Done"))) {if (_(_($36$_p2a).age) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$36$_p2a]); })();})(p2a))))(_(print)((function($36$_p3){if (_($36$_p3) instanceof $36$_Person3) {if (Fay$$equal(_($36$_p3).slot3,Fay$$list("Chris"))) {if (Fay$$equal(_($36$_p3).slot2,Fay$$list("Done"))) {if (_(_($36$_p3).slot1) === 13) {return Fay$$list("Hello!");}}}}return (function(){ throw (["unhandled case",$36$_p3]); })();})(p3)))));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}if (_obj instanceof $36$_Person3) {return {"instance": "Person3","slot3": Fay$$fayToJs(["string"],_(_obj.slot3)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot1": Fay$$fayToJs(["int"],_(_obj.slot1))};}if (_obj instanceof $36$_Person2) {return {"instance": "Person2","fname": Fay$$fayToJs(["string"],_(_obj.fname)),"sname": Fay$$fayToJs(["string"],_(_obj.sname)),"age": Fay$$fayToJs(["int"],_(_obj.age))};}if (_obj instanceof $36$_Person1) {return {"instance": "Person1","slot1": Fay$$fayToJs(["string"],_(_obj.slot1)),"slot2": Fay$$fayToJs(["string"],_(_obj.slot2)),"slot3": Fay$$fayToJs(["int"],_(_obj.slot3))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}if (obj["instance"] === "Person3") {return new $36$_Person3(Fay$$jsToFay(["string"],obj["slot3"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["int"],obj["slot1"]));}if (obj["instance"] === "Person2") {return new $36$_Person2(Fay$$jsToFay(["string"],obj["fname"]),Fay$$jsToFay(["string"],obj["sname"]),Fay$$jsToFay(["int"],obj["age"]));}if (obj["instance"] === "Person1") {return new $36$_Person1(Fay$$jsToFay(["string"],obj["slot1"]),Fay$$jsToFay(["string"],obj["slot2"]),Fay$$jsToFay(["int"],obj["slot3"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main;+this.p3 = p3;+this.p2a = p2a;+this.p2 = p2;+this.p1 = p1;+this.slot1 = slot1;+this.slot2 = slot2;+this.slot3 = slot3;+this.age = age;+this.sname = sname;+this.fname = fname; // Built-ins this._ = _;@@ -429,6 +537,6 @@ }; ;-var main = new Main();+var main = new Records(); main._(main.main);
tests/reservedWords.hs view
@@ -1,6 +1,8 @@ {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE NoImplicitPrelude #-} +module ReservedWords where+ import Language.Fay.FFI import Language.Fay.Prelude
tests/reservedWords.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var ReservedWords = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$)((function(){var $_break = new $(function(){return Fay$$list("break");});return _(printS)($_break);})()))(_(_($62$$62$)((function(){var $_catch = new $(function(){return Fay$$list("catch");});return _(printS)($_catch);})()))(_(_($62$$62$)((function(){var $_const = new $(function(){return Fay$$list("const");});return _(printS)($_const);})()))(_(_($62$$62$)((function(){var $_continue = new $(function(){return Fay$$list("continue");});return _(printS)($_continue);})()))(_(_($62$$62$)((function(){var $_debugger = new $(function(){return Fay$$list("debugger");});return _(printS)($_debugger);})()))(_(_($62$$62$)((function(){var $_delete = new $(function(){return Fay$$list("delete");});return _(printS)($_delete);})()))(_(_($62$$62$)((function(){var $_enum = new $(function(){return Fay$$list("enum");});return _(printS)($_enum);})()))(_(_($62$$62$)((function(){var $_export = new $(function(){return Fay$$list("export");});return _(printS)($_export);})()))(_(_($62$$62$)((function(){var $_extends = new $(function(){return Fay$$list("extends");});return _(printS)($_extends);})()))(_(_($62$$62$)((function(){var $_finally = new $(function(){return Fay$$list("finally");});return _(printS)($_finally);})()))(_(_($62$$62$)((function(){var $_for = new $(function(){return Fay$$list("for");});return _(printS)($_for);})()))(_(_($62$$62$)((function(){var $_function = new $(function(){return Fay$$list("function");});return _(printS)($_function);})()))(_(_($62$$62$)((function(){var $_implements = new $(function(){return Fay$$list("implements");});return _(printS)($_implements);})()))(_(_($62$$62$)((function(){var $_instanceof = new $(function(){return Fay$$list("instanceof");});return _(printS)($_instanceof);})()))(_(_($62$$62$)((function(){var $_interface = new $(function(){return Fay$$list("interface");});return _(printS)($_interface);})()))(_(_($62$$62$)((function(){var $_new = new $(function(){return Fay$$list("new");});return _(printS)($_new);})()))(_(_($62$$62$)((function(){var $_null = new $(function(){return Fay$$list("null");});return _(printS)($_null);})()))(_(_($62$$62$)((function(){var $_package = new $(function(){return Fay$$list("package");});return _(printS)($_package);})()))(_(_($62$$62$)((function(){var $_private = new $(function(){return Fay$$list("private");});return _(printS)($_private);})()))(_(_($62$$62$)((function(){var $_protected = new $(function(){return Fay$$list("protected");});return _(printS)($_protected);})()))(_(_($62$$62$)((function(){var $_public = new $(function(){return Fay$$list("public");});return _(printS)($_public);})()))(_(_($62$$62$)((function(){var $_return = new $(function(){return Fay$$list("return");});return _(printS)($_return);})()))(_(_($62$$62$)((function(){var $_static = new $(function(){return Fay$$list("static");});return _(printS)($_static);})()))(_(_($62$$62$)((function(){var $_super = new $(function(){return Fay$$list("super");});return _(printS)($_super);})()))(_(_($62$$62$)((function(){var $_switch = new $(function(){return Fay$$list("switch");});return _(printS)($_switch);})()))(_(_($62$$62$)((function(){var $_this = new $(function(){return Fay$$list("this");});return _(printS)($_this);})()))(_(_($62$$62$)((function(){var $_throw = new $(function(){return Fay$$list("throw");});return _(printS)($_throw);})()))(_(_($62$$62$)((function(){var $_try = new $(function(){return Fay$$list("try");});return _(printS)($_try);})()))(_(_($62$$62$)((function(){var $_typeof = new $(function(){return Fay$$list("typeof");});return _(printS)($_typeof);})()))(_(_($62$$62$)((function(){var $_undefined = new $(function(){return Fay$$list("undefined");});return _(printS)($_undefined);})()))(_(_($62$$62$)((function(){var $_var = new $(function(){return Fay$$list("var");});return _(printS)($_var);})()))(_(_($62$$62$)((function(){var $_void = new $(function(){return Fay$$list("void");});return _(printS)($_void);})()))(_(_($62$$62$)((function(){var $_while = new $(function(){return Fay$$list("while");});return _(printS)($_while);})()))(_(_($62$$62$)((function(){var $_with = new $(function(){return Fay$$list("with");});return _(printS)($_with);})()))(_(_($62$$62$)((function(){var $_yield = new $(function(){return Fay$$list("yield");});return _(printS)($_yield);})()))(_(_($62$$62$)(_(printS)(Fay$$list(""))))(_(_($36$)(printS))(_(_($_const)(Fay$$list("stdconst")))(2))))))))))))))))))))))))))))))))))))));});var printS = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$)((function(){var $_break = new $(function(){return Fay$$list("break");});return _(printS)($_break);})()))(_(_($62$$62$)((function(){var $_catch = new $(function(){return Fay$$list("catch");});return _(printS)($_catch);})()))(_(_($62$$62$)((function(){var $_const = new $(function(){return Fay$$list("const");});return _(printS)($_const);})()))(_(_($62$$62$)((function(){var $_continue = new $(function(){return Fay$$list("continue");});return _(printS)($_continue);})()))(_(_($62$$62$)((function(){var $_debugger = new $(function(){return Fay$$list("debugger");});return _(printS)($_debugger);})()))(_(_($62$$62$)((function(){var $_delete = new $(function(){return Fay$$list("delete");});return _(printS)($_delete);})()))(_(_($62$$62$)((function(){var $_enum = new $(function(){return Fay$$list("enum");});return _(printS)($_enum);})()))(_(_($62$$62$)((function(){var $_export = new $(function(){return Fay$$list("export");});return _(printS)($_export);})()))(_(_($62$$62$)((function(){var $_extends = new $(function(){return Fay$$list("extends");});return _(printS)($_extends);})()))(_(_($62$$62$)((function(){var $_finally = new $(function(){return Fay$$list("finally");});return _(printS)($_finally);})()))(_(_($62$$62$)((function(){var $_for = new $(function(){return Fay$$list("for");});return _(printS)($_for);})()))(_(_($62$$62$)((function(){var $_function = new $(function(){return Fay$$list("function");});return _(printS)($_function);})()))(_(_($62$$62$)((function(){var $_implements = new $(function(){return Fay$$list("implements");});return _(printS)($_implements);})()))(_(_($62$$62$)((function(){var $_instanceof = new $(function(){return Fay$$list("instanceof");});return _(printS)($_instanceof);})()))(_(_($62$$62$)((function(){var $_interface = new $(function(){return Fay$$list("interface");});return _(printS)($_interface);})()))(_(_($62$$62$)((function(){var $_new = new $(function(){return Fay$$list("new");});return _(printS)($_new);})()))(_(_($62$$62$)((function(){var $_null = new $(function(){return Fay$$list("null");});return _(printS)($_null);})()))(_(_($62$$62$)((function(){var $_package = new $(function(){return Fay$$list("package");});return _(printS)($_package);})()))(_(_($62$$62$)((function(){var $_private = new $(function(){return Fay$$list("private");});return _(printS)($_private);})()))(_(_($62$$62$)((function(){var $_protected = new $(function(){return Fay$$list("protected");});return _(printS)($_protected);})()))(_(_($62$$62$)((function(){var $_public = new $(function(){return Fay$$list("public");});return _(printS)($_public);})()))(_(_($62$$62$)((function(){var $_return = new $(function(){return Fay$$list("return");});return _(printS)($_return);})()))(_(_($62$$62$)((function(){var $_static = new $(function(){return Fay$$list("static");});return _(printS)($_static);})()))(_(_($62$$62$)((function(){var $_super = new $(function(){return Fay$$list("super");});return _(printS)($_super);})()))(_(_($62$$62$)((function(){var $_switch = new $(function(){return Fay$$list("switch");});return _(printS)($_switch);})()))(_(_($62$$62$)((function(){var $_this = new $(function(){return Fay$$list("this");});return _(printS)($_this);})()))(_(_($62$$62$)((function(){var $_throw = new $(function(){return Fay$$list("throw");});return _(printS)($_throw);})()))(_(_($62$$62$)((function(){var $_try = new $(function(){return Fay$$list("try");});return _(printS)($_try);})()))(_(_($62$$62$)((function(){var $_typeof = new $(function(){return Fay$$list("typeof");});return _(printS)($_typeof);})()))(_(_($62$$62$)((function(){var $_undefined = new $(function(){return Fay$$list("undefined");});return _(printS)($_undefined);})()))(_(_($62$$62$)((function(){var $_var = new $(function(){return Fay$$list("var");});return _(printS)($_var);})()))(_(_($62$$62$)((function(){var $_void = new $(function(){return Fay$$list("void");});return _(printS)($_void);})()))(_(_($62$$62$)((function(){var $_while = new $(function(){return Fay$$list("while");});return _(printS)($_while);})()))(_(_($62$$62$)((function(){var $_with = new $(function(){return Fay$$list("with");});return _(printS)($_with);})()))(_(_($62$$62$)((function(){var $_yield = new $(function(){return Fay$$list("yield");});return _(printS)($_yield);})()))(_(_($62$$62$)(_(printS)(Fay$$list(""))))(_(_($36$)(printS))(_(_($_const)(Fay$$list("stdconst")))(2))))))))))))))))))))))))))))))))))))));});var printS = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.printS = printS; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new ReservedWords(); main._(main.main);
tests/tailRecursion.hs view
@@ -14,7 +14,7 @@ sum n acc = sum (n - 1) (acc + n) getSeconds :: Fay Double-getSeconds = foreignFay "new Date"+getSeconds = ffi "new Date" print :: Double -> Fay () print = ffi "console.log(%1)"
tests/tailRecursion.js view
@@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,11 @@ * Application code. */ -var main = new $(function(){return _(print)(_(_(sum)(100000))(0));});var sum = function($_a){return function($_b){return new $(function(){var acc = $_b;if (_($_a) === 0) {return acc;}var acc = $_b;var n = $_a;return _(_(sum)(_(n) - 1))(_(acc) + _(n));});};};var getSeconds = new $(function(){return _(foreignFay)(Fay$$list("new Date"));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(print)(_(_(sum)(100000))(0));});var sum = function($36$_a){return function($36$_b){return new $(function(){var acc = $36$_b;if (_($36$_a) === 0) {return acc;}var acc = $36$_b;var n = $36$_a;return _(_(sum)(_(Fay$$sub)(_(n))(1)))(_(Fay$$add)(_(acc))(_(n)));});};};var getSeconds = new $(function(){return Fay$$jsToFay(["action",[["double"]]],new Date);});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["double"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral; this.max = max; this.min = min; this.mod = mod;
tests/then.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Then where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print "Hello," >> print "World!" print :: String -> Fay ()
tests/then.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Then = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$)(_(print)(Fay$$list("Hello,"))))(_(print)(Fay$$list("World!")));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$)(_(print)(Fay$$list("Hello,"))))(_(print)(Fay$$list("World!")));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Then(); main._(main.main);
tests/utf8 view
@@ -1,4 +1,4 @@-¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ+¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ ... ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ@@ -52,7 +52,6 @@ ㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍻ ㍼ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ... 一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ... 가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ...- ... 豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ... ff fi fl ffi ffl ſt st ﬓ ﬔ ﬕ ﬖ ﬗ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ טּ יּ ךּ כּ לּ מּ נּ סּ ףּ פּ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ...
tests/utf8.hs view
@@ -1,14 +1,16 @@--- | Unicode test.- {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE NoImplicitPrelude #-}+-- | Unicode test. +module Utf8 where+ import Language.Fay.FFI import Language.Fay.Prelude +main :: Fay () main = do -- Latin-1 Supplement- printS "¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ"+ printS "¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ" -- Latin Extended-A printS "Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ"@@ -116,8 +118,6 @@ printS "一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ..." -- Hangul Syllables printS "가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ..."- -- Private Use- printS " ..." -- CJK Compatibility Ideographs printS "豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ..." -- Alphabetic Presentation Forms
tests/utf8.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Utf8 = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){return _(_($62$$62$)(_(printS)(Fay$$list("¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ"))))(_(_($62$$62$)(_(printS)(Fay$$list("Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩"))))(_(_($62$$62$)(_(printS)(Fay$$list("̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͠ ͡"))))(_(_($62$$62$)(_(printS)(Fay$$list("ʹ ͵ ͺ ; ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϐ ϑ ϒ ϓ ϔ ϕ ϖ Ϛ Ϝ Ϟ Ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ"))))(_(_($62$$62$)(_(printS)(Fay$$list("Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ў Џ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ў џ Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ Ҁ ҁ ҂ ҃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Ն Շ Ո Չ Պ Ջ Ռ Ս Վ Տ Ր Ց Ւ Փ Ք Օ Ֆ ՙ ՚ ՛ ՜ ՝ ՞ ՟ ա բ գ դ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ ջ ռ ս վ տ ր ց ւ փ ք օ ֆ և ։"))))(_(_($62$$62$)(_(printS)(Fay$$list("֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝ ֞ ֟ ֠ ֡ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֻ ּ ֽ ־ ֿ ׀ ׁ ׂ ׃ ׄ א ב ג ד ה ו ז ח ט י ך כ ל ם מ ן נ ס ע ף פ ץ צ ק ר ש ת װ ױ ײ ׳ ״"))))(_(_($62$$62$)(_(printS)(Fay$$list("، ؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न ऩ प फ ब भ म य र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॊ ो ौ ् ॐ ॑ ॒ ॓ ॔ क़ ख़ ग़ ज़ ड़ ढ़ फ़ य़ ॠ ॡ ॢ ॣ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॰"))))(_(_($62$$62$)(_(printS)(Fay$$list("ঁ ং ঃ অ আ ই ঈ উ ঊ ঋ ঌ এ ঐ ও ঔ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ ় া ি ী ু ূ ৃ ৄ ে ৈ ো ৌ ্ ৗ ড় ঢ় য় ৠ ৡ ৢ ৣ ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ৰ ৱ ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৺"))))(_(_($62$$62$)(_(printS)(Fay$$list("ਂ ਅ ਆ ਇ ਈ ਉ ਊ ਏ ਐ ਓ ਔ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਲ਼ ਵ ਸ਼ ਸ ਹ ਼ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ ੍ ਖ਼ ਗ਼ ਜ਼ ੜ ਫ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੰ ੱ ੲ ੳ ੴ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ઁ ં ઃ અ આ ઇ ઈ ઉ ઊ ઋ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ ળ વ શ ષ સ હ ઼ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્ ૐ ૠ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ଁ ଂ ଃ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଌ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ର ଲ ଳ ଶ ଷ ସ ହ ଼ ଽ ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍ ୖ ୗ ଡ଼ ଢ଼ ୟ ୠ ୡ ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ ୰"))))(_(_($62$$62$)(_(printS)(Fay$$list("ஂ ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲"))))(_(_($62$$62$)(_(printS)(Fay$$list("ఁ ం ః అ ఆ ఇ ఈ ఉ ఊ ఋ ఌ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల ళ వ శ ష స హ ా ి ీ ు ూ ృ ౄ ె ే ై ొ ో ౌ ్ ౕ ౖ ౠ ౡ ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ಂ ಃ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ಌ ಎ ಏ ಐ ಒ ಓ ಔ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ಳ ವ ಶ ಷ ಸ ಹ ಾ ಿ ೀ ು ೂ ೃ ೄ ೆ ೇ ೈ ೊ ೋ ೌ ್ ೕ ೖ ೞ ೠ ೡ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ം ഃ അ ആ ഇ ഈ ഉ ഊ ഋ ഌ എ ഏ ഐ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ യ ര റ ല ള ഴ വ ശ ഷ സ ഹ ാ ി ീ ു ൂ ൃ െ േ ൈ ൊ ോ ൌ ് ൗ ൠ ൡ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ ั า ำ ิ ี ึ ื ุ ู ฺ ฿ เ แ โ ใ ไ ๅ ๆ ็ ่ ้ ๊ ๋ ์ ํ ๎ ๏ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๚ ๛"))))(_(_($62$$62$)(_(printS)(Fay$$list("ກ ຂ ຄ ງ ຈ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ສ ຫ ອ ຮ ຯ ະ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ົ ຼ ຽ ເ ແ ໂ ໃ ໄ ໆ ່ ້ ໊ ໋ ໌ ໍ ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ ໜ ໝ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ༀ ༁ ༂ ༃ ༄ ༅ ༆ ༇ ༈ ༉ ༊ ་ ༌ ། ༎ ༏ ༐ ༑ ༒ ༓ ༔ ༕ ༖ ༗ ༘ ༙ ༚ ༛ ༜ ༝ ༞ ༟ ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ༴ ༵ ༶ ༷ ༸ ༹ ༺ ༻ ༼ ༽ ༾ ༿ ཀ ཁ ག གྷ ང ཅ ཆ ཇ ཉ ཊ ཋ ཌ ཌྷ ཎ ཏ ཐ ད དྷ ན པ ཕ བ བྷ མ ཙ ཚ ཛ ཛྷ ཝ ཞ ཟ འ ཡ ར ལ ཤ ཥ ས ཧ ཨ ཀྵ ཱ ི ཱི ུ ཱུ ྲྀ ཷ ླྀ ཹ ེ ཻ ོ ཽ ཾ ཿ ྀ ཱྀ ྂ ྃ ྄ ྅ ྆ ྇ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ⴀ Ⴁ Ⴂ Ⴃ Ⴄ Ⴅ Ⴆ Ⴇ Ⴈ Ⴉ Ⴊ Ⴋ Ⴌ Ⴍ Ⴎ Ⴏ Ⴐ Ⴑ Ⴒ Ⴓ Ⴔ Ⴕ Ⴖ Ⴗ Ⴘ Ⴙ Ⴚ Ⴛ Ⴜ Ⴝ Ⴞ Ⴟ Ⴠ Ⴡ Ⴢ Ⴣ Ⴤ Ⴥ ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ ჱ ჲ ჳ ჴ ჵ ჶ ჻"))))(_(_($62$$62$)(_(printS)(Fay$$list("ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᄓ ᄔ ᄕ ᄖ ᄗ ᄘ ᄙ ᄚ ᄛ ᄜ ᄝ ᄞ ᄟ ᄠ ᄡ ᄢ ᄣ ᄤ ᄥ ᄦ ᄧ ᄨ ᄩ ᄪ ᄫ ᄬ ᄭ ᄮ ᄯ ᄰ ᄱ ᄲ ᄳ ᄴ ᄵ ᄶ ᄷ ᄸ ᄹ ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ᅀ ᅁ ᅂ ᅃ ᅄ ᅅ ᅆ ᅇ ᅈ ᅉ ᅊ ᅋ ᅌ ᅍ ᅎ ᅏ ᅐ ᅑ ᅒ ᅓ ᅔ ᅕ ᅖ ᅗ ᅘ ᅙ ᅟ ᅠ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᅶ ᅷ ᅸ ᅹ ᅺ ᅻ ᅼ ᅽ ᅾ ᅿ ᆀ ᆁ ᆂ ᆃ ᆄ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ḁ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ Ḓ ḓ Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ ḽ Ḿ ḿ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ Ṑ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṥ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ ἐ ἑ ἒ ἓ ἔ ἕ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ ὀ ὁ ὂ ὃ ὄ ὅ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ Ὑ Ὓ Ὕ Ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “ ” „ ‟"))))(_(_($62$$62$)(_(printS)(Fay$$list("⁰ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎"))))(_(_($62$$62$)(_(printS)(Fay$$list("₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨ ₩ ₪ ₫"))))(_(_($62$$62$)(_(printS)(Fay$$list("⃐ ⃑ ⃒ ⃓ ⃔ ⃕ ⃖ ⃗ ⃘ ⃙ ⃚ ⃛ ⃜ ⃝ ⃞ ⃟ ⃠ ⃡"))))(_(_($62$$62$)(_(printS)(Fay$$list("℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ"))))(_(_($62$$62$)(_(printS)(Fay$$list("⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ"))))(_(_($62$$62$)(_(printS)(Fay$$list("← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪"))))(_(_($62$$62$)(_(printS)(Fay$$list("∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("⌀ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨ 〈 〉 ⌫ ⌬ ⌭ ⌮ ⌯ ⌰ ⌱ ⌲ ⌳ ⌴ ⌵ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺"))))(_(_($62$$62$)(_(printS)(Fay$$list("␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␠ ␡ ␢ ␣ "))))(_(_($62$$62$)(_(printS)(Fay$$list("⑀ ⑁ ⑂ ⑃ ⑄ ⑅ ⑆ ⑇ ⑈ ⑉ ⑊"))))(_(_($62$$62$)(_(printS)(Fay$$list("① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿"))))(_(_($62$$62$)(_(printS)(Fay$$list("▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔ ▕"))))(_(_($62$$62$)(_(printS)(Fay$$list("■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯"))))(_(_($62$$62$)(_(printS)(Fay$$list("☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☚ ☛ ☜ ☝ ☞ ☟ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯"))))(_(_($62$$62$)(_(printS)(Fay$$list("✁ ✂ ✃ ✄ ✆ ✇ ✈ ✉ ✌ ✍ ✎ ✏ ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list(" 、 。 〃 〄 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 〠 〡 〢 〣 〤 〥 〦 〧 〨 〩 〪 〫 〬 〭 〮 〯 〰 〱 〲 〳 〴 〵 〶 〷 〿"))))(_(_($62$$62$)(_(printS)(Fay$$list("ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゙ ゚ ゛ ゜ ゝ ゞ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ ・ ー ヽ ヾ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ㄪ ㄫ ㄬ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ"))))(_(_($62$$62$)(_(printS)(Fay$$list("㆐ ㆑ ㆒ ㆓ ㆔ ㆕ ㆖ ㆗ ㆘ ㆙ ㆚ ㆛ ㆜ ㆝ ㆞ ㆟"))))(_(_($62$$62$)(_(printS)(Fay$$list("㈀ ㈁ ㈂ ㈃ ㈄ ㈅ ㈆ ㈇ ㈈ ㈉ ㈊ ㈋ ㈌ ㈍ ㈎ ㈏ ㈐ ㈑ ㈒ ㈓ ㈔ ㈕ ㈖ ㈗ ㈘ ㈙ ㈚ ㈛ ㈜ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㈰ ㈱ ㈲ ㈳ ㈴ ㈵ ㈶ ㈷ ㈸ ㈹ ㈺ ㈻ ㈼ ㈽ ㈾ ㈿ ㉀ ㉁ ㉂ ㉃ ㉠ ㉡ ㉢ ㉣ ㉤ ㉥ ㉦ ㉧ ㉨ ㉩ ㉪ ㉫ ㉬ ㉭ ㉮ ㉯ ㉰ ㉱ ㉲ ㉳ ㉴ ㉵ ㉶ ㉷ ㉸ ㉹ ㉺ ㉻ ㉿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㊊ ㊋ ㊌ ㊍ ㊎ ㊏ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊙ ㊚ ㊛ ㊜ ㊝ ㊞ ㊟ ㊠ ㊡ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍻ ㍼ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list(" ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ff fi fl ffi ffl ſt st ﬓ ﬔ ﬕ ﬖ ﬗ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ טּ יּ ךּ כּ לּ מּ נּ סּ ףּ פּ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("︠ ︡ ︢ ︣"))))(_(_($62$$62$)(_(printS)(Fay$$list("︰ ︱ ︲ ︳ ︴ ︵ ︶ ︷ ︸ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹉ ﹊ ﹋ ﹌ ﹍ ﹎ ﹏"))))(_(_($62$$62$)(_(printS)(Fay$$list("﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫"))))(_(_($62$$62$)(_(printS)(Fay$$list("ﹰ ﹱ ﹲ ﹴ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ..."))))(_(printS)(Fay$$list("! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ ..."))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));});var printS = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){return _(_($62$$62$)(_(printS)(Fay$$list("¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ"))))(_(_($62$$62$)(_(printS)(Fay$$list("Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩"))))(_(_($62$$62$)(_(printS)(Fay$$list("̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͠ ͡"))))(_(_($62$$62$)(_(printS)(Fay$$list("ʹ ͵ ͺ ; ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϐ ϑ ϒ ϓ ϔ ϕ ϖ Ϛ Ϝ Ϟ Ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ"))))(_(_($62$$62$)(_(printS)(Fay$$list("Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ў Џ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ў џ Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ Ҁ ҁ ҂ ҃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Ն Շ Ո Չ Պ Ջ Ռ Ս Վ Տ Ր Ց Ւ Փ Ք Օ Ֆ ՙ ՚ ՛ ՜ ՝ ՞ ՟ ա բ գ դ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ ջ ռ ս վ տ ր ց ւ փ ք օ ֆ և ։"))))(_(_($62$$62$)(_(printS)(Fay$$list("֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝ ֞ ֟ ֠ ֡ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֻ ּ ֽ ־ ֿ ׀ ׁ ׂ ׃ ׄ א ב ג ד ה ו ז ח ט י ך כ ל ם מ ן נ ס ע ף פ ץ צ ק ר ש ת װ ױ ײ ׳ ״"))))(_(_($62$$62$)(_(printS)(Fay$$list("، ؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न ऩ प फ ब भ म य र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॊ ो ौ ् ॐ ॑ ॒ ॓ ॔ क़ ख़ ग़ ज़ ड़ ढ़ फ़ य़ ॠ ॡ ॢ ॣ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॰"))))(_(_($62$$62$)(_(printS)(Fay$$list("ঁ ং ঃ অ আ ই ঈ উ ঊ ঋ ঌ এ ঐ ও ঔ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ ় া ি ী ু ূ ৃ ৄ ে ৈ ো ৌ ্ ৗ ড় ঢ় য় ৠ ৡ ৢ ৣ ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ৰ ৱ ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৺"))))(_(_($62$$62$)(_(printS)(Fay$$list("ਂ ਅ ਆ ਇ ਈ ਉ ਊ ਏ ਐ ਓ ਔ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਲ਼ ਵ ਸ਼ ਸ ਹ ਼ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ ੍ ਖ਼ ਗ਼ ਜ਼ ੜ ਫ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੰ ੱ ੲ ੳ ੴ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ઁ ં ઃ અ આ ઇ ઈ ઉ ઊ ઋ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ ળ વ શ ષ સ હ ઼ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્ ૐ ૠ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ଁ ଂ ଃ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଌ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ର ଲ ଳ ଶ ଷ ସ ହ ଼ ଽ ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍ ୖ ୗ ଡ଼ ଢ଼ ୟ ୠ ୡ ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ ୰"))))(_(_($62$$62$)(_(printS)(Fay$$list("ஂ ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲"))))(_(_($62$$62$)(_(printS)(Fay$$list("ఁ ం ః అ ఆ ఇ ఈ ఉ ఊ ఋ ఌ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల ళ వ శ ష స హ ా ి ీ ు ూ ృ ౄ ె ే ై ొ ో ౌ ్ ౕ ౖ ౠ ౡ ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ಂ ಃ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ಌ ಎ ಏ ಐ ಒ ಓ ಔ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ಳ ವ ಶ ಷ ಸ ಹ ಾ ಿ ೀ ು ೂ ೃ ೄ ೆ ೇ ೈ ೊ ೋ ೌ ್ ೕ ೖ ೞ ೠ ೡ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ം ഃ അ ആ ഇ ഈ ഉ ഊ ഋ ഌ എ ഏ ഐ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ യ ര റ ല ള ഴ വ ശ ഷ സ ഹ ാ ി ീ ു ൂ ൃ െ േ ൈ ൊ ോ ൌ ് ൗ ൠ ൡ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯"))))(_(_($62$$62$)(_(printS)(Fay$$list("ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ ั า ำ ิ ี ึ ื ุ ู ฺ ฿ เ แ โ ใ ไ ๅ ๆ ็ ่ ้ ๊ ๋ ์ ํ ๎ ๏ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๚ ๛"))))(_(_($62$$62$)(_(printS)(Fay$$list("ກ ຂ ຄ ງ ຈ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ສ ຫ ອ ຮ ຯ ະ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ົ ຼ ຽ ເ ແ ໂ ໃ ໄ ໆ ່ ້ ໊ ໋ ໌ ໍ ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ ໜ ໝ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ༀ ༁ ༂ ༃ ༄ ༅ ༆ ༇ ༈ ༉ ༊ ་ ༌ ། ༎ ༏ ༐ ༑ ༒ ༓ ༔ ༕ ༖ ༗ ༘ ༙ ༚ ༛ ༜ ༝ ༞ ༟ ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ༴ ༵ ༶ ༷ ༸ ༹ ༺ ༻ ༼ ༽ ༾ ༿ ཀ ཁ ག གྷ ང ཅ ཆ ཇ ཉ ཊ ཋ ཌ ཌྷ ཎ ཏ ཐ ད དྷ ན པ ཕ བ བྷ མ ཙ ཚ ཛ ཛྷ ཝ ཞ ཟ འ ཡ ར ལ ཤ ཥ ས ཧ ཨ ཀྵ ཱ ི ཱི ུ ཱུ ྲྀ ཷ ླྀ ཹ ེ ཻ ོ ཽ ཾ ཿ ྀ ཱྀ ྂ ྃ ྄ ྅ ྆ ྇ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ⴀ Ⴁ Ⴂ Ⴃ Ⴄ Ⴅ Ⴆ Ⴇ Ⴈ Ⴉ Ⴊ Ⴋ Ⴌ Ⴍ Ⴎ Ⴏ Ⴐ Ⴑ Ⴒ Ⴓ Ⴔ Ⴕ Ⴖ Ⴗ Ⴘ Ⴙ Ⴚ Ⴛ Ⴜ Ⴝ Ⴞ Ⴟ Ⴠ Ⴡ Ⴢ Ⴣ Ⴤ Ⴥ ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ ჱ ჲ ჳ ჴ ჵ ჶ ჻"))))(_(_($62$$62$)(_(printS)(Fay$$list("ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᄓ ᄔ ᄕ ᄖ ᄗ ᄘ ᄙ ᄚ ᄛ ᄜ ᄝ ᄞ ᄟ ᄠ ᄡ ᄢ ᄣ ᄤ ᄥ ᄦ ᄧ ᄨ ᄩ ᄪ ᄫ ᄬ ᄭ ᄮ ᄯ ᄰ ᄱ ᄲ ᄳ ᄴ ᄵ ᄶ ᄷ ᄸ ᄹ ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ᅀ ᅁ ᅂ ᅃ ᅄ ᅅ ᅆ ᅇ ᅈ ᅉ ᅊ ᅋ ᅌ ᅍ ᅎ ᅏ ᅐ ᅑ ᅒ ᅓ ᅔ ᅕ ᅖ ᅗ ᅘ ᅙ ᅟ ᅠ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᅶ ᅷ ᅸ ᅹ ᅺ ᅻ ᅼ ᅽ ᅾ ᅿ ᆀ ᆁ ᆂ ᆃ ᆄ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("Ḁ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ Ḓ ḓ Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ ḽ Ḿ ḿ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ Ṑ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṥ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ ἐ ἑ ἒ ἓ ἔ ἕ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ ὀ ὁ ὂ ὃ ὄ ὅ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ Ὑ Ὓ Ὕ Ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “ ” „ ‟"))))(_(_($62$$62$)(_(printS)(Fay$$list("⁰ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎"))))(_(_($62$$62$)(_(printS)(Fay$$list("₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨ ₩ ₪ ₫"))))(_(_($62$$62$)(_(printS)(Fay$$list("⃐ ⃑ ⃒ ⃓ ⃔ ⃕ ⃖ ⃗ ⃘ ⃙ ⃚ ⃛ ⃜ ⃝ ⃞ ⃟ ⃠ ⃡"))))(_(_($62$$62$)(_(printS)(Fay$$list("℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ"))))(_(_($62$$62$)(_(printS)(Fay$$list("⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ"))))(_(_($62$$62$)(_(printS)(Fay$$list("← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪"))))(_(_($62$$62$)(_(printS)(Fay$$list("∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("⌀ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨ 〈 〉 ⌫ ⌬ ⌭ ⌮ ⌯ ⌰ ⌱ ⌲ ⌳ ⌴ ⌵ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺"))))(_(_($62$$62$)(_(printS)(Fay$$list("␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␠ ␡ ␢ ␣ "))))(_(_($62$$62$)(_(printS)(Fay$$list("⑀ ⑁ ⑂ ⑃ ⑄ ⑅ ⑆ ⑇ ⑈ ⑉ ⑊"))))(_(_($62$$62$)(_(printS)(Fay$$list("① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿"))))(_(_($62$$62$)(_(printS)(Fay$$list("▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔ ▕"))))(_(_($62$$62$)(_(printS)(Fay$$list("■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯"))))(_(_($62$$62$)(_(printS)(Fay$$list("☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☚ ☛ ☜ ☝ ☞ ☟ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯"))))(_(_($62$$62$)(_(printS)(Fay$$list("✁ ✂ ✃ ✄ ✆ ✇ ✈ ✉ ✌ ✍ ✎ ✏ ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list(" 、 。 〃 〄 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 〠 〡 〢 〣 〤 〥 〦 〧 〨 〩 〪 〫 〬 〭 〮 〯 〰 〱 〲 〳 〴 〵 〶 〷 〿"))))(_(_($62$$62$)(_(printS)(Fay$$list("ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゙ ゚ ゛ ゜ ゝ ゞ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ ・ ー ヽ ヾ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ㄪ ㄫ ㄬ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ"))))(_(_($62$$62$)(_(printS)(Fay$$list("㆐ ㆑ ㆒ ㆓ ㆔ ㆕ ㆖ ㆗ ㆘ ㆙ ㆚ ㆛ ㆜ ㆝ ㆞ ㆟"))))(_(_($62$$62$)(_(printS)(Fay$$list("㈀ ㈁ ㈂ ㈃ ㈄ ㈅ ㈆ ㈇ ㈈ ㈉ ㈊ ㈋ ㈌ ㈍ ㈎ ㈏ ㈐ ㈑ ㈒ ㈓ ㈔ ㈕ ㈖ ㈗ ㈘ ㈙ ㈚ ㈛ ㈜ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㈰ ㈱ ㈲ ㈳ ㈴ ㈵ ㈶ ㈷ ㈸ ㈹ ㈺ ㈻ ㈼ ㈽ ㈾ ㈿ ㉀ ㉁ ㉂ ㉃ ㉠ ㉡ ㉢ ㉣ ㉤ ㉥ ㉦ ㉧ ㉨ ㉩ ㉪ ㉫ ㉬ ㉭ ㉮ ㉯ ㉰ ㉱ ㉲ ㉳ ㉴ ㉵ ㉶ ㉷ ㉸ ㉹ ㉺ ㉻ ㉿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㊊ ㊋ ㊌ ㊍ ㊎ ㊏ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊙ ㊚ ㊛ ㊜ ㊝ ㊞ ㊟ ㊠ ㊡ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍻ ㍼ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("ff fi fl ffi ffl ſt st ﬓ ﬔ ﬕ ﬖ ﬗ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ טּ יּ ךּ כּ לּ מּ נּ סּ ףּ פּ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ"))))(_(_($62$$62$)(_(printS)(Fay$$list("ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ..."))))(_(_($62$$62$)(_(printS)(Fay$$list("︠ ︡ ︢ ︣"))))(_(_($62$$62$)(_(printS)(Fay$$list("︰ ︱ ︲ ︳ ︴ ︵ ︶ ︷ ︸ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹉ ﹊ ﹋ ﹌ ﹍ ﹎ ﹏"))))(_(_($62$$62$)(_(printS)(Fay$$list("﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫"))))(_(_($62$$62$)(_(printS)(Fay$$list("ﹰ ﹱ ﹲ ﹴ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ..."))))(_(printS)(Fay$$list("! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ ...")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));});var printS = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.printS = printS; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Utf8(); main._(main.main);
tests/where.hs view
@@ -1,5 +1,10 @@ {-# LANGUAGE NoImplicitPrelude #-} +module Where where++import Language.Fay.FFI+import Language.Fay.Prelude+ main = print $ "Hello " ++ friends ++ family where friends = "my friends" family = " and family"
tests/where.js view
@@ -1,6 +1,6 @@ /** @constructor */-var Main = function(){+var Where = function(){ var True = true; var False = false; @@ -32,20 +32,14 @@ } // Force the thunk.-$.prototype.force = function(nocache){- return nocache- ? this.value()- : this.forced- ? this.value- : (this.forced = true, this.value = this.value());+$.prototype.force = function(nocache) {+ return nocache ?+ this.value() :+ (this.forced ?+ this.value :+ (this.value = this.value(), this.forced = true, this.value)); }; --// Eval in the context of the Haskell bindings.-function Fay$$eval(str){- return eval(str);-}- /******************************************************************************* * Monad. */@@ -164,6 +158,11 @@ jsObj = _(fayObj); break; }+ case "int": {+ // Serialize int, just force the argument. Ints are unboxed.+ jsObj = _(fayObj);+ break;+ } case "bool": { // Bools are unboxed. jsObj = _(fayObj);@@ -213,6 +212,14 @@ fayObj = jsObj; break; }+ case "int": {+ // Int are unboxed, so there's no forcing to do.+ // But we can do validation that the int has no decimal places.+ // E.g. Math.round(x)!=x? throw "NOT AN INTEGER, GET OUT!"+ fayObj = Math.round(jsObj);+ if(fayObj!==jsObj) throw "Argument " + jsObj + " is not an integer!";+ break;+ } case "bool": { // Bools are unboxed. fayObj = jsObj;@@ -274,30 +281,42 @@ // Built-in *. function Fay$$mult(x){ return function(y){- return _(x) * _(y);+ return new $(function(){+ return _(x) * _(y);+ }); }; }+var $42$ = Fay$$mult; // Built-in +. function Fay$$add(x){ return function(y){- return _(x) + _(y);+ return new $(function(){+ return _(x) + _(y);+ }); }; }+var $43$ = Fay$$add; // Built-in -. function Fay$$sub(x){ return function(y){- return _(x) - _(y);+ return new $(function(){+ return _(x) - _(y);+ }); }; }+var $45$ = Fay$$sub; // Built-in /. function Fay$$div(x){ return function(y){- return _(x) / _(y);+ return new $(function(){+ return _(x) / _(y);+ }); }; }+var $47$ = Fay$$div; /******************************************************************************* * Booleans.@@ -326,66 +345,98 @@ if (lit1 === null || lit2 === null) return lit1 === lit2; } while (true);+ } else if (typeof lit1 == 'object' && typeof lit2 == 'object' && lit1 && lit2 &&+ lit1.constructor === lit2.constructor) {+ for(var x in lit1) {+ if(!(lit1.hasOwnProperty(x) && lit2.hasOwnProperty(x) &&+ Fay$$equal(lit1[x],lit2[x])))+ return false;+ }+ return true; } else {- return false;+ return false; } } // Built-in ==. function Fay$$eq(x){ return function(y){- return Fay$$equal(x,y);+ return new $(function(){+ return Fay$$equal(x,y);+ }); }; }+var $61$$61$ = Fay$$eq; // Built-in /=. function Fay$$neq(x){ return function(y){- return !(Fay$$equal(x,y));+ return new $(function(){+ return !(Fay$$equal(x,y));+ }); }; }+var $47$$61$ = Fay$$neq; // Built-in >. function Fay$$gt(x){ return function(y){- return _(x) > _(y);+ return new $(function(){+ return _(x) > _(y);+ }); }; }+var $62$ = Fay$$gt; // Built-in <. function Fay$$lt(x){ return function(y){- return _(x) < _(y);+ return new $(function(){+ return _(x) < _(y);+ }); }; }+var $60$ = Fay$$lt; // Built-in >=. function Fay$$gte(x){ return function(y){- return _(x) >= _(y);+ return new $(function(){+ return _(x) >= _(y);+ }); }; }+var $62$$61$ = Fay$$gte; // Built-in <=. function Fay$$lte(x){ return function(y){- return _(x) <= _(y);+ return new $(function(){+ return _(x) <= _(y);+ }); }; }+var $60$$61$ = Fay$$lte; // Built-in &&. function Fay$$and(x){ return function(y){- return _(x) && _(y);+ return new $(function(){+ return _(x) && _(y);+ }); }; }+var $38$$38$ = Fay$$and; // Built-in ||. function Fay$$or(x){ return function(y){- return _(x) || _(y);+ return new $(function(){+ return _(x) || _(y);+ }); }; }+var $124$$124$ = Fay$$or; /******************************************************************************* * Mutable references.@@ -417,8 +468,55 @@ * Application code. */ -var main = new $(function(){var friends = new $(function(){return Fay$$list("my friends");});var family = new $(function(){return Fay$$list(" and family");});return _(_($36$)(print))(_(_($43$$43$)(Fay$$list("Hello ")))(_(_($43$$43$)(friends))(family)));});var print = function($_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$_a)));});};var $_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $_Just(slot1);});};var $_Nothing = function(){};var Nothing = new $(function(){return new $_Nothing();});var show = function($_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var $_null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var $_GT = function(){};var GT = new $(function(){return new $_GT();});var $_LT = function(){};var LT = new $(function(){return new $_LT();});var $_EQ = function(){};var EQ = new $(function(){return new $_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){if (_($_ys) === null) {return Fay$$list([x]);}var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) instanceof $_Nothing) {var m = $_a;return m;}if (_($_c) instanceof $_Just) {var x = _($_c).slot1;var f = $_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};var $_const = function($_a){return function($_b){return new $(function(){var a = $_a;return a;});};};var length = function($_a){return new $(function(){var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return 1 + _(_(length)(xs));}if (_($_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$_a]];});};var mod = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$_a) % Fay$$fayToJs(["double"],$_b));});};};var min = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var max = function($_a){return function($_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$_a),Fay$$fayToJs(["double"],$_b)));});};};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $_EQ) {return {"instance": "EQ"};}if (_obj instanceof $_LT) {return {"instance": "LT"};}if (_obj instanceof $_GT) {return {"instance": "GT"};}if (_obj instanceof $_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $_EQ();}if (obj["instance"] === "LT") {return new $_LT();}if (obj["instance"] === "GT") {return new $_GT();}if (obj["instance"] === "Nothing") {return new $_Nothing();}if (obj["instance"] === "Just") {return new $_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;};+var main = new $(function(){var friends = new $(function(){return Fay$$list("my friends");});var family = new $(function(){return Fay$$list(" and family");});return _(_($36$)(print))(_(_($43$$43$)(Fay$$list("Hello ")))(_(_($43$$43$)(friends))(family)));});var print = function($36$_a){return new $(function(){return Fay$$jsToFay(["action",[["unknown"]]],console.log(Fay$$fayToJs(["string"],$36$_a)));});};var $36$_Just = function(slot1){this.slot1 = slot1;};var Just = function(slot1){return new $(function(){return new $36$_Just(slot1);});};var $36$_Nothing = function(){};var Nothing = new $(function(){return new $36$_Nothing();});var show = function($36$_a){return new $(function(){return Fay$$jsToFay(["string"],JSON.stringify(Fay$$fayToJs(["unknown"],$36$_a)));});};var fromInteger = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var fromRational = function($36$_a){return new $(function(){var x = $36$_a;return x;});};var snd = function($36$_a){return new $(function(){var x = Fay$$index(1)(_($36$_a));return x;throw ["unhandled case in Ident \"snd\"",[$36$_a]];});};var fst = function($36$_a){return new $(function(){var x = Fay$$index(0)(_($36$_a));return x;throw ["unhandled case in Ident \"fst\"",[$36$_a]];});};var find = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($36$_b) === null) {return Nothing;}throw ["unhandled case in Ident \"find\"",[$36$_a,$36$_b]];});};};var any = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"any\"",[$36$_a,$36$_b]];});};};var filter = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var p = $36$_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($36$_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$36$_a,$36$_b]];});};};var not = function($36$_a){return new $(function(){var p = $36$_a;return _(p) ? false : true;});};var $_null = function($36$_a){return new $(function(){if (_($36$_a) === null) {return true;}return false;});};var map = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$36$_a,$36$_b]];});};};var nub = function($36$_a){return new $(function(){var ls = $36$_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_a) === null) {return null;}var ls = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$36$_a,$36$_b]];});};};var elem = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var y = $36$_$36$_b.car;var ys = $36$_$36$_b.cdr;var x = $36$_a;return _(Fay$$or)(_(_(_(Fay$$eq)(x))(y)))(_(_(_(elem)(x))(ys)));}if (_($36$_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$36$_a,$36$_b]];});};};var $36$_GT = function(){};var GT = new $(function(){return new $36$_GT();});var $36$_LT = function(){};var LT = new $(function(){return new $36$_LT();});var $36$_EQ = function(){};var EQ = new $(function(){return new $36$_EQ();});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(Fay$$gt)(_(x))(_(y))) ? GT : _(_(Fay$$lt)(_(x))(_(y))) ? LT : EQ;});};};var sortBy = function($36$_a){return new $(function(){var cmp = $36$_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var x = $36$_b;return Fay$$list([x]);}var ys = $36$_c;var x = $36$_b;var cmp = $36$_a;return (function($36$_ys){if (_($36$_ys) === null) {return Fay$$list([x]);}var $36$_$36$_ys = _($36$_ys);if ($36$_$36$_ys instanceof Fay$$Cons) {var y = $36$_$36$_ys.car;var ys$39$ = $36$_$36$_ys.cdr;return (function($tmp){if (_($tmp) instanceof $36$_GT) {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$36$_ys]); })();})(ys);});};};};var when = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var p = $36$_a;return _(p) ? _(_($62$$62$)(m))(_($_return)(Fay$$unit)) : _($_return)(Fay$$unit);});};};var enumFrom = function($36$_a){return new $(function(){var i = $36$_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(Fay$$add)(_(i))(1)));});};var enumFromTo = function($36$_a){return function($36$_b){return new $(function(){var n = $36$_b;var i = $36$_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(Fay$$add)(_(i))(1)))(n));});};};var zipWith = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var b = $36$_$36$_c.car;var bs = $36$_$36$_c.cdr;var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var a = $36$_$36$_b.car;var as = $36$_$36$_b.cdr;var f = $36$_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var b = $36$_$36$_b.car;var bs = $36$_$36$_b.cdr;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var a = $36$_$36$_a.car;var as = $36$_$36$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var y = $36$_c;var x = $36$_b;var f = $36$_a;return _(_(f)(y))(x);});};};};var maybe = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) instanceof $36$_Nothing) {var m = $36$_a;return m;}if (_($36$_c) instanceof $36$_Just) {var x = _($36$_c).slot1;var f = $36$_b;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$36$_a,$36$_b,$36$_c]];});};};};var $46$ = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){var x = $36$_c;var g = $36$_b;var f = $36$_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($36$_a){return function($36$_b){return new $(function(){var y = $36$_b;var x = $36$_a;return _(_(conc)(x))(y);});};};var $36$ = function($36$_a){return function($36$_b){return new $(function(){var x = $36$_b;var f = $36$_a;return _(f)(x);});};};var conc = function($36$_a){return function($36$_b){return new $(function(){var ys = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $36$_b;if (_($36$_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$36$_a,$36$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$36$_a,$36$_b,$36$_c]];});};};};var foldl = function($36$_a){return function($36$_b){return function($36$_c){return new $(function(){if (_($36$_c) === null) {var z = $36$_b;return z;}var $36$_$36$_c = _($36$_c);if ($36$_$36$_c instanceof Fay$$Cons) {var x = $36$_$36$_c.car;var xs = $36$_$36$_c.cdr;var z = $36$_b;var f = $36$_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$36$_a,$36$_b,$36$_c]];});};};};var lookup = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {var _key = $36$_a;return Nothing;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($36$_$36$_b.car));var y = Fay$$index(1)(_($36$_$36$_b.car));var xys = $36$_$36$_b.cdr;var key = $36$_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$36$_a,$36$_b]];});};};var intersperse = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$36$_a,$36$_b]];});};};var prependToAll = function($36$_a){return function($36$_b){return new $(function(){if (_($36$_b) === null) {return null;}var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var sep = $36$_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$36$_a,$36$_b]];});};};var intercalate = function($36$_a){return function($36$_b){return new $(function(){var xss = $36$_b;var xs = $36$_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($36$_a){return function($36$_b){return new $(function(){var m = $36$_b;var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($62$$62$)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($36$_a) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$36$_a,$36$_b]];});};};var mapM_ = function($36$_a){return function($36$_b){return new $(function(){var $36$_$36$_b = _($36$_b);if ($36$_$36$_b instanceof Fay$$Cons) {var x = $36$_$36$_b.car;var xs = $36$_$36$_b.cdr;var m = $36$_a;return _(_($62$$62$)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($36$_b) === null) {return _($_return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$36$_a,$36$_b]];});};};var $_const = function($36$_a){return function($36$_b){return new $(function(){var a = $36$_a;return a;});};};var length = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var xs = $36$_$36$_a.cdr;return _(Fay$$add)(1)(_(_(length)(xs)));}if (_($36$_a) === null) {return 0;}throw ["unhandled case in Ident \"length\"",[$36$_a]];});};var mod = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["double"],$36$_a) % Fay$$fayToJs(["double"],$36$_b));});};};var min = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.min(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var max = function($36$_a){return function($36$_b){return new $(function(){return Fay$$jsToFay(["double"],Math.max(Fay$$fayToJs(["double"],$36$_a),Fay$$fayToJs(["double"],$36$_b)));});};};var fromIntegral = function($36$_a){return new $(function(){return Fay$$jsToFay(["double"],Fay$$fayToJs(["int"],$36$_a));});};var otherwise = true;var reverse = function($36$_a){return new $(function(){var $36$_$36$_a = _($36$_a);if ($36$_$36$_a instanceof Fay$$Cons) {var x = $36$_$36$_a.car;var xs = $36$_$36$_a.cdr;return _(_($43$$43$)(_(reverse)(xs)))(Fay$$list([x]));}if (_($36$_a) === null) {return null;}throw ["unhandled case in Ident \"reverse\"",[$36$_a]];});};var Fay$$fayToJsUserDefined = function(type,obj){var _obj = _(obj);var argTypes = type[2];if (_obj instanceof $36$_EQ) {return {"instance": "EQ"};}if (_obj instanceof $36$_LT) {return {"instance": "LT"};}if (_obj instanceof $36$_GT) {return {"instance": "GT"};}if (_obj instanceof $36$_Nothing) {return {"instance": "Nothing"};}if (_obj instanceof $36$_Just) {return {"instance": "Just","slot1": Fay$$fayToJs(["unknown"],_(_obj.slot1))};}return obj;};var Fay$$jsToFayUserDefined = function(type,obj){if (obj["instance"] === "EQ") {return new $36$_EQ();}if (obj["instance"] === "LT") {return new $36$_LT();}if (obj["instance"] === "GT") {return new $36$_GT();}if (obj["instance"] === "Nothing") {return new $36$_Nothing();}if (obj["instance"] === "Just") {return new $36$_Just(Fay$$jsToFay(["unknown"],obj["slot1"]));}return obj;}; // Exports+this.reverse = reverse;+this.otherwise = otherwise;+this.fromIntegral = fromIntegral;+this.max = max;+this.min = min;+this.mod = mod;+this.length = length;+this.$_const = $_const;+this.mapM_ = mapM_;+this.forM_ = forM_;+this.intercalate = intercalate;+this.prependToAll = prependToAll;+this.intersperse = intersperse;+this.lookup = lookup;+this.foldl = foldl;+this.foldr = foldr;+this.concat = concat;+this.conc = conc;+this.$36$ = $36$;+this.$43$$43$ = $43$$43$;+this.$46$ = $46$;+this.maybe = maybe;+this.flip = flip;+this.zip = zip;+this.zipWith = zipWith;+this.enumFromTo = enumFromTo;+this.enumFrom = enumFrom;+this.when = when;+this.insertBy = insertBy;+this.sortBy = sortBy;+this.compare = compare;+this.sort = sort;+this.elem = elem;+this.nub$39$ = nub$39$;+this.nub = nub;+this.map = map;+this.$_null = $_null;+this.not = not;+this.filter = filter;+this.any = any;+this.find = find;+this.fst = fst;+this.snd = snd;+this.fromRational = fromRational;+this.fromInteger = fromInteger;+this.show = show;+this.print = print; this.main = main; // Built-ins@@ -429,6 +527,6 @@ }; ;-var main = new Main();+var main = new Where(); main._(main.main);