fay 0.10.0.0 → 0.10.1.0
raw patch · 52 files changed
+813/−523 lines, 52 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Language.Fay.FFI: data Fay a
+ Language.Fay.Prelude: (!!) :: [a] -> Int -> a
+ Language.Fay.Prelude: ($!) :: (a -> b) -> a -> b
+ Language.Fay.Prelude: (**) :: Double -> Double -> Double
+ Language.Fay.Prelude: (^) :: Num a => a -> Int -> a
+ Language.Fay.Prelude: (^^) :: Double -> Int -> Double
+ Language.Fay.Prelude: Left :: a -> Either a b
+ Language.Fay.Prelude: Right :: b -> Either a b
+ Language.Fay.Prelude: abs :: (Num a, Ord a) => a -> a
+ Language.Fay.Prelude: acos :: Double -> Double
+ Language.Fay.Prelude: acosh :: Double -> Double
+ Language.Fay.Prelude: all :: (a -> Bool) -> [a] -> Bool
+ Language.Fay.Prelude: and :: [Bool] -> Bool
+ Language.Fay.Prelude: asTypeOf :: a -> a -> a
+ Language.Fay.Prelude: asin :: Double -> Double
+ Language.Fay.Prelude: asinh :: Double -> Double
+ Language.Fay.Prelude: atan :: Double -> Double
+ Language.Fay.Prelude: atanh :: Double -> Double
+ Language.Fay.Prelude: break :: (a -> Bool) -> [a] -> ([a], [a])
+ Language.Fay.Prelude: ceiling :: Double -> Int
+ Language.Fay.Prelude: cos :: Double -> Double
+ Language.Fay.Prelude: cosh :: Double -> Double
+ Language.Fay.Prelude: curry :: ((a, b) -> c) -> a -> b -> c
+ Language.Fay.Prelude: cycle :: [a] -> [a]
+ Language.Fay.Prelude: data Either a b
+ Language.Fay.Prelude: div :: Int -> Int -> Int
+ Language.Fay.Prelude: divMod :: Int -> Int -> (Int, Int)
+ Language.Fay.Prelude: drop :: Int -> [a] -> [a]
+ Language.Fay.Prelude: dropWhile :: (a -> Bool) -> [a] -> [a]
+ Language.Fay.Prelude: either :: (a -> c) -> (b -> c) -> Either a b -> c
+ Language.Fay.Prelude: enumFromThen :: Num t => t -> t -> [t]
+ Language.Fay.Prelude: enumFromThenTo :: (Ord t, Num t) => t -> t -> t -> [t]
+ Language.Fay.Prelude: error :: String -> a
+ Language.Fay.Prelude: even :: Int -> Bool
+ Language.Fay.Prelude: exp :: Double -> Double
+ Language.Fay.Prelude: floor :: Double -> Int
+ Language.Fay.Prelude: foldl1 :: (a -> a -> a) -> [a] -> a
+ Language.Fay.Prelude: foldr1 :: (a -> a -> a) -> [a] -> a
+ Language.Fay.Prelude: gcd :: Int -> Int -> Int
+ Language.Fay.Prelude: head :: [a] -> a
+ Language.Fay.Prelude: id :: a -> a
+ Language.Fay.Prelude: init :: [a] -> [a]
+ Language.Fay.Prelude: iterate :: (a -> a) -> a -> [a]
+ Language.Fay.Prelude: last :: [a] -> a
+ Language.Fay.Prelude: lcm :: Int -> Int -> Int
+ Language.Fay.Prelude: lines :: String -> [String]
+ Language.Fay.Prelude: log :: Double -> Double
+ Language.Fay.Prelude: logBase :: Double -> Double -> Double
+ Language.Fay.Prelude: maximum :: (Num a, Foreign a) => [a] -> a
+ Language.Fay.Prelude: minimum :: (Num a, Foreign a) => [a] -> a
+ Language.Fay.Prelude: negate :: Num a => a -> a
+ Language.Fay.Prelude: notElem :: Eq a => a -> [a] -> Bool
+ Language.Fay.Prelude: odd :: Int -> Bool
+ Language.Fay.Prelude: or :: [Bool] -> Bool
+ Language.Fay.Prelude: pi :: Double
+ Language.Fay.Prelude: pred :: Num a => a -> a
+ Language.Fay.Prelude: print :: Foreign a => a -> Fay ()
+ Language.Fay.Prelude: product :: Num a => [a] -> a
+ Language.Fay.Prelude: properFraction :: Double -> (Int, Double)
+ Language.Fay.Prelude: putStrLn :: String -> Fay ()
+ Language.Fay.Prelude: quot :: Int -> Int -> Int
+ Language.Fay.Prelude: quotRem :: Int -> Int -> (Int, Int)
+ Language.Fay.Prelude: recip :: Double -> Double
+ Language.Fay.Prelude: rem :: Int -> Int -> Int
+ Language.Fay.Prelude: repeat :: a -> [a]
+ Language.Fay.Prelude: replicate :: Int -> a -> [a]
+ Language.Fay.Prelude: round :: Double -> Int
+ Language.Fay.Prelude: scanl :: (a -> b -> a) -> a -> [b] -> [a]
+ Language.Fay.Prelude: scanl1 :: (a -> a -> a) -> [a] -> [a]
+ Language.Fay.Prelude: scanr :: (a -> b -> b) -> b -> [a] -> [b]
+ Language.Fay.Prelude: scanr1 :: (a -> a -> a) -> [a] -> [a]
+ Language.Fay.Prelude: seq :: a -> b -> b
+ Language.Fay.Prelude: sequence_ :: Monad m => [m a] -> m ()
+ Language.Fay.Prelude: signum :: (Num a, Ord a) => a -> a
+ Language.Fay.Prelude: sin :: Double -> Double
+ Language.Fay.Prelude: sinh :: Double -> Double
+ Language.Fay.Prelude: span :: (a -> Bool) -> [a] -> ([a], [a])
+ Language.Fay.Prelude: splitAt :: Int -> [a] -> ([a], [a])
+ Language.Fay.Prelude: sqrt :: Double -> Double
+ Language.Fay.Prelude: subtract :: Num a => a -> a -> a
+ Language.Fay.Prelude: succ :: Num a => a -> a
+ Language.Fay.Prelude: sum :: Num a => [a] -> a
+ Language.Fay.Prelude: tail :: [a] -> [a]
+ Language.Fay.Prelude: take :: Int -> [a] -> [a]
+ Language.Fay.Prelude: takeWhile :: (a -> Bool) -> [a] -> [a]
+ Language.Fay.Prelude: tan :: Double -> Double
+ Language.Fay.Prelude: tanh :: Double -> Double
+ Language.Fay.Prelude: truncate :: Double -> Int
+ Language.Fay.Prelude: uncurry :: (a -> b -> c) -> (a, b) -> c
+ Language.Fay.Prelude: undefined :: a
+ Language.Fay.Prelude: unlines :: [String] -> String
+ Language.Fay.Prelude: until :: (a -> Bool) -> (a -> a) -> a -> a
+ Language.Fay.Prelude: unwords :: [String] -> String
+ Language.Fay.Prelude: unzip :: [(a, b)] -> ([a], [b])
+ Language.Fay.Prelude: unzip3 :: [(a, b, c)] -> ([a], [b], [c])
+ Language.Fay.Prelude: words :: String -> [String]
+ Language.Fay.Prelude: zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
+ Language.Fay.Prelude: zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
- Language.Fay.Prelude: any :: (t -> Bool) -> [t] -> Bool
+ Language.Fay.Prelude: any :: (a -> Bool) -> [a] -> Bool
- Language.Fay.Prelude: enumFromTo :: (Eq t, Num t) => t -> t -> [t]
+ Language.Fay.Prelude: enumFromTo :: (Ord t, Num t) => t -> t -> [t]
- Language.Fay.Prelude: max :: Double -> Double -> Double
+ Language.Fay.Prelude: max :: (Num a, Foreign a) => a -> a -> a
- Language.Fay.Prelude: min :: Double -> Double -> Double
+ Language.Fay.Prelude: min :: (Num a, Foreign a) => a -> a -> a
- Language.Fay.Prelude: mod :: Double -> Double -> Double
+ Language.Fay.Prelude: mod :: Int -> Int -> Int
Files
- fay.cabal +14/−21
- js/runtime.js +12/−0
- src/Language/Fay/Compiler.hs +96/−11
- src/Language/Fay/FFI.hs +5/−1
- src/Language/Fay/Prelude.hs +2/−2
- src/Language/Fay/Stdlib.hs +501/−25
- src/Language/Fay/Types.hs +1/−1
- src/Tests.hs +17/−13
- tests/Bool.hs +0/−7
- tests/Double.hs +0/−7
- tests/Double2.hs +0/−7
- tests/Double3.hs +0/−7
- tests/Double4.hs +0/−7
- tests/HierarchicalImport.hs +1/−9
- tests/List.hs +2/−9
- tests/List2.hs +1/−8
- tests/Monad.hs +0/−6
- tests/Monad2.hs +1/−7
- tests/RecCon.hs +0/−8
- tests/RecDecl.hs +2/−11
- tests/RecordImport_Export.hs +0/−2
- tests/RecordImport_Import.hs +2/−10
- tests/String.hs +1/−8
- tests/asPatternMatch +6/−3
- tests/asPatternMatch.hs +3/−11
- tests/basicFunctions.hs +1/−8
- tests/case.hs +3/−10
- tests/case2.hs +3/−10
- tests/caseList.hs +1/−8
- tests/caseWildcard.hs +3/−10
- tests/do.hs +1/−8
- tests/doAssingPatternMatch.hs +1/−8
- tests/doBindAssign.hs +1/−8
- tests/emptyMain.hs +0/−5
- tests/fix.hs +0/−8
- tests/fromInteger.hs +1/−9
- tests/infixDataConst.hs +0/−8
- tests/ints.hs +0/−8
- tests/mutableReference.hs +1/−6
- tests/patternGuards +3/−3
- tests/patternGuards.hs +8/−12
- tests/patternMatchFail.hs +1/−8
- tests/recordFunctionPatternMatch.hs +1/−8
- tests/recordPatternMatch.hs +3/−10
- tests/recordPatternMatch2.hs +5/−12
- tests/recordUseBeforeDefine.hs +0/−7
- tests/records.hs +4/−11
- tests/reservedWords.hs +38/−43
- tests/tailRecursion.hs +3/−11
- tests/then.hs +1/−8
- tests/utf8.hs +62/−67
- tests/where.hs +1/−8
fay.cabal view
@@ -1,5 +1,5 @@ name: fay-version: 0.10.0.0+version: 0.10.1.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,@@ -22,38 +22,31 @@ . /Release Notes/ .- * Add TCO optimization.- .- * Added uncurrying optimization for non-partial applications.+ * Enable strict list for arithmetic sequences optimisation only when compiler optimise flag set. .- * Add simple benchmarking program.+ * Add print and putStrLn to the Prelude .- * Add SVG logo.+ * Add list utility functions from the standard Prelude .- * Added Defined type and appropriate serialization.+ * Test optimized as well as unoptimized builds. .- * Treat Maybe as a nullable value in conversions.+ * Standard precendence and associativity for infix operators .- * Added oscillator example.+ * Add function utilities from Prelude, including seq .- * Add optimization flag.-- * Support tuple serialization.- * Fix list length in pats (closes #145).+ * Add math functions in Prelude .- * Name resolution and some export list support.-- * Add codeworld space invaders example.+ * Add support for sections (desugaring to lambdas) .- * NoImplicitPrelude is now passed automatically to GHC. Does not break code that uses the pragma (see #134).+ * Added example of the ContT and Deferred monad, sleep and readFile. .- * Add support for list comprehensions using desugaring from Haskell report. See #40 and #132.+ * Add more of the prelude, including error and a lot of math stuff. .- * Make error messages a tiny bit friendlier, and some general house-keeping.+ * Remove needs for module declarations in modules that define main. .- * Support negation expressions (see #116).+ * Support enumThen ([1,2..]) style lists. .- * Rewrite readFromFay using only Data, no Read/Show requirements (see #112).+ * Add support for enumFromThenTo ([1,2..10]) lists. . See full history at: <https://github.com/faylang/fay/commits> homepage: http://fay-lang.org/
js/runtime.js view
@@ -37,6 +37,18 @@ (this.value = this.value(), this.forced = true, this.value)); }; +function Fay$$seq(x) {+ return function(y) {+ _(x,false);+ return y;+ }+}++function Fay$$seq$36$uncurried(x,y) {+ _(x,false);+ return y;+}+ /******************************************************************************* * Monad. */
src/Language/Fay/Compiler.hs view
@@ -27,7 +27,7 @@ import Language.Fay.Compiler.Misc import Language.Fay.Print (printJSString) import Language.Fay.Types-+import qualified Language.Fay.Stdlib as Stdlib (enumFromTo,enumFromThenTo) import Control.Applicative import Control.Monad.Error import Control.Monad.IO@@ -207,7 +207,8 @@ typecheck :: [FilePath] -> [String] -> Bool -> String -> Compile () typecheck includeDirs ghcFlags wall fp = do res <- liftIO $ readAllFromProcess' "ghc" (- ["-fno-code", "-package fay", "-XNoImplicitPrelude", fp] ++ map ("-i" ++) includeDirs ++ ghcFlags ++ wallF) ""+ ["-fno-code", "-package fay", "-XNoImplicitPrelude", "-main-is", "Language.Fay.DummyMain", fp]+ ++ map ("-i" ++) includeDirs ++ ghcFlags ++ wallF) "" either error (warn . fst) res where wallF | wall = ["-Wall"]@@ -536,14 +537,12 @@ Con qname -> compileVar qname Do stmts -> compileDoBlock stmts Lambda _ pats exp -> compileLambda pats exp- EnumFrom i -> do e <- compileExp i- name <- resolveName "enumFrom"- return (JsApp (JsName (JsNameVar name)) [e])- EnumFromTo i i' -> do f <- compileExp i- t <- compileExp i'- name <- resolveName "enumFromTo"- return (JsApp (JsApp (JsName (JsNameVar name)) [f])- [t])+ LeftSection e o -> compileExp =<< desugarLeftSection e o+ RightSection o e -> compileExp =<< desugarRightSection o e+ EnumFrom i -> compileEnumFrom i+ EnumFromTo i i' -> compileEnumFromTo i i'+ EnumFromThen a b -> compileEnumFromThen a b+ EnumFromThenTo a b z -> compileEnumFromThenTo a b z RecConstr name fieldUpdates -> compileRecConstr name fieldUpdates RecUpdate rec fieldUpdates -> updateRec rec fieldUpdates ListComp exp stmts -> compileExp =<< desugarListComp exp stmts@@ -644,7 +643,7 @@ [JsEarlyReturn exp] (reverse (zip uniqueNames pats)) --- | Compile list comprehensions.+-- | Desugar list comprehensions. desugarListComp :: Exp -> [QualStmt] -> Compile Exp desugarListComp e [] = return (List [ e ])@@ -664,6 +663,16 @@ desugarListComp _ (s : _ ) = throwError (UnsupportedQualStmt s) +-- | Desugar left sections to lambdas.+desugarLeftSection :: Exp -> QOp -> Compile Exp+desugarLeftSection e o = withScopedTmpName $ \tmp ->+ return (Lambda undefined [PVar tmp] (InfixApp e o (Var (UnQual tmp))))++-- | Desugar left sections to lambdas.+desugarRightSection :: QOp -> Exp -> Compile Exp+desugarRightSection o e = withScopedTmpName $ \tmp ->+ return (Lambda undefined [PVar tmp] (InfixApp (Var (UnQual tmp)) o e))+ -- | Compile case expressions. compileCase :: Exp -> [Alt] -> Compile JsExp compileCase exp alts = do@@ -948,3 +957,79 @@ String string -> return (JsApp (JsName (JsBuiltIn "list")) [JsLit (JsStr string)]) lit -> throwError (UnsupportedLiteral lit)++-- | Maximum number of elements to allow in strict list representation+-- of arithmetic sequences.+maxStrictASLen :: Int+maxStrictASLen = 10++-- | Compile [e1..] arithmetic sequences.+compileEnumFrom :: Exp -> Compile JsExp+compileEnumFrom i = do+ e <- compileExp i+ name <- resolveName "enumFrom"+ return (JsApp (JsName (JsNameVar name)) [e])++-- | Compile [e1..e3] arithmetic sequences.+compileEnumFromTo :: Exp -> Exp -> Compile JsExp+compileEnumFromTo i i' = do+ f <- compileExp i+ t <- compileExp i'+ name <- resolveName "enumFromTo"+ cfg <- gets stateConfig+ return $ case optEnumFromTo cfg f t of+ Just s -> s+ _ -> JsApp (JsApp (JsName (JsNameVar name)) [f]) [t]++-- | Optimize short literal [e1..e3] arithmetic sequences.+optEnumFromTo :: CompileConfig -> JsExp -> JsExp -> Maybe JsExp+optEnumFromTo cfg (JsLit f) (JsLit t) =+ if configOptimize cfg+ then case (f,t) of+ (JsInt fl, JsInt tl) -> strict JsInt fl tl+ (JsFloating fl, JsFloating tl) -> strict JsFloating fl tl+ _ -> Nothing+ else Nothing+ where strict :: (Enum a, Ord a, Num a) => (a -> JsLit) -> a -> a -> Maybe JsExp+ strict litfn f t =+ if fromEnum t - fromEnum f < maxStrictASLen+ then Just . makeList . map (JsLit . litfn) $ Stdlib.enumFromTo f t+ else Nothing+optEnumFromTo _ _ _ = Nothing++-- | Compile [e1,e2..] arithmetic sequences.+compileEnumFromThen :: Exp -> Exp -> Compile JsExp+compileEnumFromThen a b = do+ fr <- compileExp a+ th <- compileExp b+ name <- resolveName "enumFromThen"+ return (JsApp (JsApp (JsName (JsNameVar name)) [fr]) [th])++-- | Compile [e1,e2..e3] arithmetic sequences.+compileEnumFromThenTo :: Exp -> Exp -> Exp -> Compile JsExp+compileEnumFromThenTo a b z = do+ fr <- compileExp a+ th <- compileExp b+ to <- compileExp z+ name <- resolveName "enumFromThenTo"+ cfg <- gets stateConfig+ return $ case optEnumFromThenTo cfg fr th to of+ Just s -> s+ _ -> JsApp (JsApp (JsApp (JsName (JsNameVar name)) [fr]) [th]) [to]++-- | Optimize short literal [e1,e2..e3] arithmetic sequences.+optEnumFromThenTo :: CompileConfig -> JsExp -> JsExp -> JsExp -> Maybe JsExp+optEnumFromThenTo cfg (JsLit fr) (JsLit th) (JsLit to) =+ if configOptimize cfg+ then case (fr,th,to) of+ (JsInt frl, JsInt thl, JsInt tol) -> strict JsInt frl thl tol+ (JsFloating frl, JsFloating thl, JsFloating tol) -> strict JsFloating frl thl tol+ _ -> Nothing+ else Nothing+ where strict :: (Enum a, Ord a, Num a) => (a -> JsLit) -> a -> a -> a -> Maybe JsExp+ strict litfn fr th to =+ if (fromEnum to - fromEnum fr) `div`+ (fromEnum th - fromEnum fr) + 1 < maxStrictASLen+ then Just . makeList . map (JsLit . litfn) $ Stdlib.enumFromThenTo fr th to+ else Nothing+optEnumFromThenTo _ _ _ _ = Nothing
src/Language/Fay/FFI.hs view
@@ -2,7 +2,11 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TypeSynonymInstances #-} -module Language.Fay.FFI where+module Language.Fay.FFI+ (Fay+ ,Foreign+ ,ffi)+ where import Language.Fay.Types (Fay) import Prelude (Bool, Char, Double, String, Int, Maybe, error)
src/Language/Fay/Prelude.hs view
@@ -38,8 +38,8 @@ import Language.Fay.Types (Fay) import Data.Data import Prelude (Bool(..), Char, Double, Eq(..), Int, Integer, Maybe(..), Monad,- Ord, Read(..), Show(), String, error, read, (&&), (*), (+), (-),- (/), (/=), (<), (<=), (==), (>), (>=), (||))+ Ord, Read(..), Show(), String, read, (&&), (*), (+), (-),+ (/), (/=), (<), (<=), (==), (>), (>=), (||)) (>>) :: Fay a -> Fay b -> Fay b (>>) = error "Language.Fay.Prelude.(>>): Used (>>) outside JS."
src/Language/Fay/Stdlib.hs view
@@ -1,67 +1,179 @@-{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE NoImplicitPrelude #-} module Language.Fay.Stdlib (($)+ ,($!)+ ,(!!) ,(++) ,(.) ,(=<<)+ ,(**)+ ,(^^)+ ,(^) ,Defined(..)+ ,Either(..) ,Ordering(..)- ,show- ,fromInteger- ,fromRational+ ,abs+ ,acos+ ,acosh+ ,all+ ,and ,any+ ,asin+ ,asinh+ ,asTypeOf+ ,atan+ ,atanh+ ,break+ ,ceiling ,compare ,concat ,concatMap ,const+ ,cos+ ,cosh+ ,curry+ ,cycle+ ,div+ ,divMod+ ,drop+ ,dropWhile+ ,either ,elem ,enumFrom+ ,enumFromThen+ ,enumFromThenTo ,enumFromTo- ,fromIntegral+ ,error+ ,even+ ,exp ,filter ,find ,flip+ ,floor ,foldl+ ,foldl1 ,foldr+ ,foldr1 ,forM_+ ,fromInteger+ ,fromIntegral+ ,fromRational ,fst- ,length- ,mod+ ,gcd+ ,head+ ,id+ ,init ,insertBy ,intercalate ,intersperse+ ,iterate+ ,last+ ,lcm+ ,length+ ,lines+ ,log+ ,logBase ,lookup ,map ,mapM_+ ,max+ ,maximum ,maybe+ ,min+ ,minimum+ ,mod+ ,negate ,not+ ,notElem ,nub ,null+ ,odd+ ,or ,otherwise+ ,pi+ ,pred ,prependToAll+ ,print+ ,product+ ,properFraction+ ,putStrLn+ ,quot+ ,quotRem+ ,recip+ ,rem+ ,repeat+ ,replicate ,reverse+ ,round+ ,scanl+ ,scanl1+ ,scanr+ ,scanr1+ ,seq ,sequence+ ,sequence_+ ,show+ ,signum+ ,sin+ ,sinh ,snd ,sort ,sortBy+ ,span+ ,splitAt+ ,sqrt+ ,subtract+ ,succ+ ,sum+ ,tail+ ,take+ ,takeWhile+ ,tan+ ,tanh+ ,truncate+ ,uncurry+ ,undefined+ ,unlines+ ,until+ ,unwords+ ,unzip+ ,unzip3 ,when+ ,words ,zip+ ,zip3 ,zipWith- ,max- ,min)+ ,zipWith3) where import Language.Fay.FFI import Prelude (Bool (..), Double, Eq (..), Fractional, Int,- Integer, Maybe (..), Monad (..), Num ((+)),- Ord ((>), (<)), Rational, Show, String, (||))+ Integer, Maybe (..), Monad (..),+ Num ((+), (-), (*)), Fractional ((/)),+ Ord ((>), (<)), Rational, Show, String,+ (&&), (||), seq) -show :: (Foreign a,Show a) => a -> String+error :: String -> a+error str = case error' str of 0 -> error str ; _ -> error str++error' :: String -> Int+error' = ffi "(function() { throw %1 })()"++undefined :: a+undefined = error "Prelude.undefined"++show :: (Foreign a, Show a) => a -> String show = ffi "JSON.stringify(%1)" data Defined a = Undefined | Defined a instance Foreign a => Foreign (Defined a) +data Either a b = Left a | Right b++either :: (a -> c) -> (b -> c) -> Either a b -> c+either f _ (Left a) = f a+either _ g (Right b) = g b+ -- There is only Double in JS. fromInteger :: a -> a fromInteger x = x@@ -69,6 +181,124 @@ fromRational :: a -> a fromRational x = x +negate :: Num a => a -> a+negate x = (-x)++abs :: (Num a, Ord a) => a -> a+abs x = if x < 0 then negate x else x++signum :: (Num a, Ord a) => a -> a+signum x = if x > 0 then 1 else if x == 0 then 0 else -1++pi :: Double+pi = ffi "Math.PI"++exp :: Double -> Double+exp = ffi "Math.exp(%1)"++sqrt :: Double -> Double+sqrt = ffi "Math.sqrt(%1)"++log :: Double -> Double+log = ffi "Math.log(%1)"++(**) :: Double -> Double -> Double+(**) = unsafePow+infixr 8 **++(^^) :: Double -> Int -> Double+(^^) = unsafePow+infixr 8 ^^++unsafePow :: (Foreign a, Num a, Foreign b, Num b) => a -> b -> a+unsafePow = ffi "Math.pow(%1,%2)"++(^) :: Num a => a -> Int -> a+a ^ b | b < 0 = error "(^): negative exponent"+ | b == 0 = 1+ | even b = let x = a ^ (b `quot` 2) in x * x+a ^ b = a * a ^ (b - 1)+infixr 8 ^++logBase :: Double -> Double -> Double+logBase b x = log x / log b++sin :: Double -> Double+sin = ffi "Math.sin(%1)"++tan :: Double -> Double+tan = ffi "Math.tan(%1)"++cos :: Double -> Double+cos = ffi "Math.cos(%1)"++asin :: Double -> Double+asin = ffi "Math.asin(%1)"++atan :: Double -> Double+atan = ffi "Math.atan(%1)"++acos :: Double -> Double+acos = ffi "Math.acos(%1)"++sinh :: Double -> Double+sinh x = (exp x - exp (-x)) / 2++tanh :: Double -> Double+tanh x = let a = exp x ; b = exp (-x) in (a - b) / (a + b)++cosh :: Double -> Double+cosh x = (exp x + exp (-x)) / 2++asinh :: Double -> Double+asinh x = log (x + sqrt(x**2 + 1))++atanh :: Double -> Double+atanh x = log ((1 + x) / (1 - x)) / 2++acosh :: Double -> Double+acosh x = log (x + sqrt (x**2 - 1))++properFraction :: Double -> (Int, Double)+properFraction x = let a = truncate x in (a, x - fromIntegral a)++truncate :: Double -> Int+truncate x = if x < 0 then ceiling x else floor x++round :: Double -> Int+round = ffi "Math.round(%1)"++ceiling :: Double -> Int+ceiling = ffi "Math.ceil(%1)"++floor :: Double -> Int+floor = ffi "Math.floor(%1)"++subtract :: Num a => a -> a -> a+subtract = flip (-)++even :: Int -> Bool+even x = x `rem` 2 == 0++odd :: Int -> Bool+odd x = not (even x)++gcd :: Int -> Int -> Int+gcd a b = go (abs a) (abs b)+ where go x 0 = x+ go x y = go y (x `rem` y)++lcm :: Int -> Int -> Int+lcm _ 0 = 0+lcm 0 _ = 0+lcm a b = abs ((a `quot` (gcd a b)) * b)++curry :: ((a, b) -> c) -> a -> b -> c+curry f x y = f (x, y)++uncurry :: (a -> b -> c) -> (a, b) -> c+uncurry f p = case p of (x, y) -> f x y+ snd :: (t, t1) -> t1 snd (_,x) = x @@ -79,10 +309,6 @@ find p (x:xs) = if p x then Just x else find p xs find _ [] = Nothing -any :: (t -> Bool) -> [t] -> Bool-any p (x:xs) = if p x then True else any p xs-any _ [] = False- filter :: (a -> Bool) -> [a] -> [a] filter p (x:xs) = if p x then x : filter p xs else filter p xs filter _ [] = []@@ -112,6 +338,9 @@ elem x (y:ys) = x == y || elem x ys elem _ [] = False +notElem :: Eq a => a -> [a] -> Bool+notElem x ys = not (elem x ys)+ data Ordering = GT | LT | EQ sort :: Ord a => [a] -> [a]@@ -142,23 +371,75 @@ when :: Monad m => Bool -> m a -> m () when p m = if p then m >> return () else return () +succ :: Num a => a -> a+succ x = x + 1++pred :: Num a => a -> a+pred x = x - 1+ enumFrom :: Num a => a -> [a] enumFrom i = i : enumFrom (i + 1) -enumFromTo :: (Eq t, Num t) => t -> t -> [t]+enumFromTo :: (Ord t, Num t) => t -> t -> [t] enumFromTo i n =- if i == n- then [i]- else i : enumFromTo (i + 1) n+ if i > n then [] else i : enumFromTo (i + 1) n -zipWith :: (a->b->c) -> [a]->[b]->[c]+enumFromBy :: (Num t) => t -> t -> [t]+enumFromBy fr by = fr : enumFromBy (fr + by) by++enumFromThen :: (Num t) => t -> t -> [t]+enumFromThen fr th = enumFromBy fr (th - fr)++enumFromByTo :: (Ord t, Num t) => t -> t -> t -> [t]+enumFromByTo fr by to = if by < 0 then neg fr else pos fr+ where neg x = if x < to then [] else x : neg (x + by)+ pos x = if x > to then [] else x : pos (x + by)++enumFromThenTo :: (Ord t, Num t) => t -> t -> t -> [t]+enumFromThenTo fr th to = enumFromByTo fr (th - fr) to++zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] zipWith f (a:as) (b:bs) = f a b : zipWith f as bs zipWith _ _ _ = [] +zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]+zipWith3 f (a:as) (b:bs) (c:cs) = f a b c : zipWith3 f as bs cs+zipWith3 _ _ _ _ = []+ zip :: [a] -> [b] -> [(a,b)] zip (a:as) (b:bs) = (a,b) : zip as bs zip _ _ = [] +zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]+zip3 (a:as) (b:bs) (c:cs) = (a,b,c) : zip3 as bs cs+zip3 _ _ _ = []++unzip :: [(a, b)] -> ([a], [b])+unzip ((x,y):ps) = case unzip ps of (xs,ys) -> (x:xs, y:ys)+unzip [] = ([], [])++unzip3 :: [(a, b, c)] -> ([a], [b], [c])+unzip3 ((x,y,z):ps) = case unzip3 ps of (xs,ys,zs) -> (x:xs, y:ys, z:zs)+unzip3 [] = ([], [], [])++lines :: String -> [String]+lines [] = []+lines s = case break isLineBreak s of (a, []) -> [a]+ (a, _:cs) -> a : lines cs+ where isLineBreak c = c == '\r' || c == '\n'++unlines :: [String] -> String+unlines = intercalate "\n"++words :: String -> [String]+words str = words' (dropWhile isSpace str)+ where words' [] = []+ words' s = case break isSpace s of (a,b) -> a : words b+ isSpace c = c `elem` " \t\r\n\f\v"++unwords :: [String] -> String+unwords = intercalate " "+ flip :: (t1 -> t2 -> t) -> t2 -> t1 -> t flip f x y = f y x @@ -168,6 +449,7 @@ (.) :: (t1 -> t) -> (t2 -> t1) -> t2 -> t (f . g) x = f (g x)+infixr 9 . (++) :: [a] -> [a] -> [a] x ++ y = conc x y@@ -192,10 +474,70 @@ foldr _ z [] = z foldr f z (x:xs) = f x (foldr f z xs) +foldr1 :: (a -> a -> a) -> [a] -> a+foldr1 _ [x] = x+foldr1 f (x:xs) = f x (foldr1 f xs)+foldr1 _ [] = error "foldr1: empty list"+ foldl :: (t1 -> t -> t1) -> t1 -> [t] -> t1 foldl _ z [] = z foldl f z (x:xs) = foldl f (f z x) xs +foldl1 :: (a -> a -> a) -> [a] -> a+foldl1 f (x:xs) = foldl f x xs+foldl1 _ [] = error "foldl1: empty list"++and :: [Bool] -> Bool+and [] = True+and (x:xs) = x && and xs++or :: [Bool] -> Bool+or [] = False+or (x:xs) = x || or xs++any :: (a -> Bool) -> [a] -> Bool+any _ [] = False+any p (x:xs) = p x || any p xs++all :: (a -> Bool) -> [a] -> Bool+all _ [] = True+all p (x:xs) = p x && all p xs++maximum :: (Num a, Foreign a) => [a] -> a+maximum [] = error "maximum: empty list"+maximum xs = foldl1 max xs++minimum :: (Num a, Foreign a) => [a] -> a+minimum [] = error "minimum: empty list"+minimum xs = foldl1 min xs++product :: Num a => [a] -> a+product [] = error "product: empty list"+product xs = foldl (*) 1 xs++sum :: Num a => [a] -> a+sum [] = error "sum: empty list"+sum xs = foldl (+) 0 xs++scanl :: (a -> b -> a) -> a -> [b] -> [a]+scanl f z l = z : case l of [] -> []+ (x:xs) -> scanl f (f z x) xs++scanl1 :: (a -> a -> a) -> [a] -> [a]+scanl1 _ [] = []+scanl1 f (x:xs) = scanl f x xs++scanr :: (a -> b -> b) -> b -> [a] -> [b]+scanr _ z [] = [z]+scanr f z (x:xs) = case scanr f z xs of (h:t) -> f x h : h : t+ _ -> undefined++scanr1 :: (a -> a -> a) -> [a] -> [a]+scanr1 _ [] = []+scanr1 _ [x] = [x]+scanr1 f (x:xs) = case scanr1 f xs of (h:t) -> f x h : h : t+ _ -> undefined+ lookup :: Eq a1 => a1 -> [(a1, a)] -> Maybe a lookup _key [] = Nothing lookup key ((x,y):xys) =@@ -228,18 +570,56 @@ length :: [a] -> Int length xs = length' 0 xs +length' :: Int -> [a] -> Int length' acc (_:xs) = length' (acc+1) xs length' acc _ = acc -mod :: Double -> Double -> Double-mod = ffi "%1 %% %2"+rem :: Int -> Int -> Int+rem x y = if y == 0 then error "Division by zero" else rem' x y+infixl 7 `rem` -min :: Double -> Double -> Double+rem' :: Int -> Int -> Int+rem' = ffi "%1 %% %2"++quot :: Int -> Int -> Int+quot x y = if y == 0 then error "Division by zero" else quot' x y+infixl 7 `quot`++quot' :: Int -> Int -> Int+quot' = ffi "~~(%1/%2)"++quotRem :: Int -> Int -> (Int, Int)+quotRem x y = (quot x y, rem x y)++div :: Int -> Int -> Int+div x y+ | x > 0 && y < 0 = quot (x-1) y - 1+ | x < 0 && y > 0 = quot (x+1) y - 1+div x y = quot x y+infixl 7 `div`++mod :: Int -> Int -> Int+mod x y+ | x > 0 && y < 0 = rem (x-1) y + y + 1+ | x < 0 && y > 0 = rem (x+1) y + y - 1+mod x y = rem x y+infixl 7 `mod`++divMod :: Int -> Int -> (Int, Int)+divMod x y+ | x > 0 && y < 0 = case (x-1) `quotRem` y of (q,r) -> (q-1, r+y+1)+ | x < 0 && y > 1 = case (x+1) `quotRem` y of (q,r) -> (q-1, r+y-1)+divMod x y = quotRem x y++min :: (Num a, Foreign a) => a -> a -> a min = ffi "Math.min(%1,%2)" -max :: Double -> Double -> Double+max :: (Num a, Foreign a) => a -> a -> a max = ffi "Math.max(%1,%2)" +recip :: Double -> Double+recip x = 1 / x+ fromIntegral :: Int -> Double fromIntegral = ffi "%1" @@ -261,3 +641,99 @@ sequence ms = foldr k (return []) ms where k m m' = do { x <- m; xs <- m'; return (x:xs) }++sequence_ :: Monad m => [m a] -> m ()+sequence_ [] = return ()+sequence_ (m:ms) = m >> sequence_ ms++id :: a -> a+id x = x++asTypeOf :: a -> a -> a+asTypeOf = const++until :: (a -> Bool) -> (a -> a) -> a -> a+until p f x = if p x then x else until p f (f x)++($!) :: (a -> b) -> a -> b+f $! x = x `seq` f x+infixr 0 $!++(!!) :: [a] -> Int -> a+a !! b = if b < 0 then error "(!!): negative index" else go a b+ where go [] _ = error "(!!): index too large"+ go (h:_) 0 = h+ go (_:t) n = go t (n-1)+infixl 9 !!++head :: [a] -> a+head [] = error "head: empty list"+head (h:_) = h++tail :: [a] -> [a]+tail [] = error "tail: empty list"+tail (_:t) = t++init :: [a] -> [a]+init [] = error "init: empty list"+init [a] = [a]+init (h:t) = h : init t++last :: [a] -> a+last [] = error "last: empty list"+last [a] = a+last (_:t) = last t++iterate :: (a -> a) -> a -> [a]+iterate f x = x : iterate f (f x)++repeat :: a -> [a]+repeat x = x : repeat x++replicate :: Int -> a -> [a]+replicate 0 _ = []+replicate n x = if n < 0 then error "replicate: negative length"+ else x : replicate (n-1) x++cycle :: [a] -> [a]+cycle [] = error "cycle: empty list"+cycle xs = xs' where xs' = xs ++ xs'++take :: Int -> [a] -> [a]+take 0 _ = []+take _ [] = []+take n (x:xs) = if n < 0 then error "take: negative length"+ else x : take (n-1) xs++drop :: Int -> [a] -> [a]+drop 0 xs = xs+drop _ [] = []+drop n (_:xs) = if n < 0 then error "drop: negative length"+ else drop (n-1) xs++splitAt :: Int -> [a] -> ([a], [a])+splitAt 0 xs = ([], xs)+splitAt _ [] = ([], [])+splitAt n (x:xs) = if n < 0 then error "splitAt: negative length"+ else case splitAt (n-1) xs of (a,b) -> (x:a, b)++takeWhile :: (a -> Bool) -> [a] -> [a]+takeWhile _ [] = []+takeWhile p (x:xs) = if p x then x : takeWhile p xs else []++dropWhile :: (a -> Bool) -> [a] -> [a]+dropWhile _ [] = []+dropWhile p (x:xs) = if p x then dropWhile p xs else x:xs++span :: (a -> Bool) -> [a] -> ([a], [a])+span _ [] = ([], [])+span p (x:xs) = if p x then case span p xs of (a,b) -> (x:a, b) else ([], x:xs)++break :: (a -> Bool) -> [a] -> ([a], [a])+break p = span (not . p)++print :: (Foreign a) => a -> Fay ()+print = ffi "(function(x) { if (console && console.log) console.log(x) })(%1)"++putStrLn :: String -> Fay ()+putStrLn = ffi "(function(x) { if (console && console.log) console.log(x) })(%1)"
src/Language/Fay/Types.hs view
@@ -120,7 +120,7 @@ ,(Symbol ">>=",[ScopeImported "Fay$" (Just "bind")]) ,(Ident "return",[ScopeImported "Fay$" (Just "return")]) ,(Ident "force",[ScopeImported "Fay$" (Just "force")])- ,(Symbol "*",[ScopeImported "Fay$" (Just "mult")])+ ,(Ident "seq",[ScopeImported "Fay$" (Just "seq")]) ,(Symbol "*",[ScopeImported "Fay$" (Just "mult")]) ,(Symbol "+",[ScopeImported "Fay$" (Just "add")]) ,(Symbol "-",[ScopeImported "Fay$" (Just "sub")])
src/Tests.hs view
@@ -27,19 +27,23 @@ -- | Make the case-by-case unit tests. makeCompilerTests :: IO Test makeCompilerTests = do- files <- fmap (map ("tests" </>) . sort . filter dotHs) $ getDirectoryContents "tests"- return $ testGroup "Tests" $ flip map files $ \file ->- testCase file $ do- let root = (reverse . drop 1 . dropWhile (/='.') . reverse) file- out = toJsName file- outExists <- doesFileExist root- compileFromTo def { configTypecheck = False, configDirectoryIncludes = ["tests/"] } file (Just out)- result <- runJavaScriptFile out- if outExists- then do output <- readFile root- assertEqual file output (either show id result)- else assertEqual file True (either (const True) (const False) result)- where dotHs = isSuffixOf ".hs"+ files <- fmap (map ("tests" </>) . sort . filter (isSuffixOf ".hs")) $ getDirectoryContents "tests"+ return $ testGroup "Tests" $ flip map files $ \file -> testCase file $ do+ testFile False file+ testFile True file++testFile :: Bool -> String -> IO ()+testFile opt file = do+ let root = (reverse . drop 1 . dropWhile (/='.') . reverse) file+ out = toJsName file+ config = def { configOptimize = opt }+ outExists <- doesFileExist root+ compileFromTo config { configTypecheck = False, configDirectoryIncludes = ["tests/"] } file (Just out)+ result <- runJavaScriptFile out+ if outExists+ then do output <- readFile root+ assertEqual file output (either show id result)+ else assertEqual file True (either (const True) (const False) result) -- | Run a JS file. runJavaScriptFile :: String -> IO (Either String String)
tests/Bool.hs view
@@ -1,12 +1,5 @@---module Bool where--import Language.Fay.FFI import Language.Fay.Prelude main :: Fay () main = print True -print :: Bool -> Fay ()-print = ffi "console.log(%1)"
tests/Double.hs view
@@ -1,11 +1,4 @@---module Double where--import Language.Fay.FFI import Language.Fay.Prelude main = print (2 * 4 / 2) -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/Double2.hs view
@@ -1,11 +1,4 @@---module Double2 where--import Language.Fay.FFI import Language.Fay.Prelude main = print (10 + (2 * (4 / 2))) -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/Double3.hs view
@@ -1,11 +1,4 @@---module Double3 where--import Language.Fay.FFI import Language.Fay.Prelude main = print (5 * 3 / 2) -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/Double4.hs view
@@ -1,11 +1,4 @@---module Double4 where--import Language.Fay.FFI import Language.Fay.Prelude main = print 1 -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/HierarchicalImport.hs view
@@ -1,14 +1,6 @@---module HierarchicalImport where--import Language.Fay.FFI import Language.Fay.Prelude- import Hierarchical.Export main :: Fay ()-main = printS exported+main = putStrLn exported -printS :: String -> Fay ()-printS = ffi "console.log(%1)"
tests/List.hs view
@@ -1,11 +1,7 @@---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)))+main = putStrLn (showList (take 5 (let ns = 1 : map' (\x -> x + 1) ns in ns))) take 0 _ = [] take n (x:xs) = x : take (n - 1) xs@@ -13,8 +9,5 @@ map' f [] = [] map' f (x:xs) = f x : map' f xs -print :: String -> Fay ()-print = ffi "console.log(%1)"--showList :: [Double] -> String+showList :: [a] -> String showList = ffi "JSON.stringify(%1)"
tests/List2.hs view
@@ -1,11 +1,7 @@---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)))+main = putStrLn (showList (take 5 (let ns = 1 : map' (foo 123) ns in ns))) foo x y = x * y / 2 @@ -14,9 +10,6 @@ map' f [] = [] map' f (x:xs) = f x : map' f xs--print :: String -> Fay ()-print = ffi "console.log(%1)" showList :: [Double] -> String showList = ffi "JSON.stringify(%1)"
tests/Monad.hs view
@@ -1,11 +1,7 @@ {-# LANGUAGE EmptyDataDecls #-} - -- | Monads test. -module Monad where--import Language.Fay.FFI import Language.Fay.Prelude main :: Fay ()@@ -18,5 +14,3 @@ print x print y -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/Monad2.hs view
@@ -4,18 +4,12 @@ -- | Monads test. -module Monad2 where--import Language.Fay.FFI import Language.Fay.Prelude main :: Fay () main = do -- State monad test- return (let result = runState demo 60 in fst result ++ ": " ++ show (snd result)) >>= print--print :: String -> Fay ()-print = ffi "console.log(%1)"+ return (let result = runState demo 60 in fst result ++ ": " ++ show (snd result)) >>= putStrLn -------------------------------------------------------------------------------- -- A monad interface
tests/RecCon.hs view
@@ -1,16 +1,8 @@---module RecCon where--import Language.Fay.FFI import Language.Fay.Prelude data Bool = True | False main = print (head (fix (\xs -> 123 : xs)))--print :: Double -> Fay ()-print = ffi "console.log(%1)" head (x:xs) = x
tests/RecDecl.hs view
@@ -1,7 +1,3 @@---module RecDecl where- import Language.Fay.FFI import Language.Fay.Prelude @@ -49,8 +45,8 @@ print r'' print r1- printS (show (i r1))- printS (show (c r1))+ putStrLn (show (i r1))+ putStrLn (show (c r1)) print r2 print r' print r3@@ -58,8 +54,3 @@ print x1 print x2 -printS :: String -> Fay ()-printS = ffi "console.log(%1)"--print :: Foreign f => f -> Fay ()-print = ffi "console.log(%1)"
tests/RecordImport_Export.hs view
@@ -1,5 +1,3 @@-- module RecordImport_Export where import Language.Fay.Prelude
tests/RecordImport_Import.hs view
@@ -1,8 +1,3 @@---module RecordImport_Import where--import Language.Fay.FFI import Language.Fay.Prelude import RecordImport_Export@@ -20,10 +15,7 @@ showFields :: Fields -> String showFields (Fields a b) = "Fields " ++ show a ++ " " ++ show b -printS :: String -> Fay ()-printS = ffi "console.log(%1)"- main = do- printS $ showR $ R 1- printS $ showFields $ Fields { fieldFoo = 2, fieldBar = 3 }+ putStrLn $ showR $ R 1+ putStrLn $ showFields $ Fields { fieldFoo = 2, fieldBar = 3 }
tests/String.hs view
@@ -1,11 +1,4 @@---module String where--import Language.Fay.FFI import Language.Fay.Prelude -main = print "Hello, World!"+main = putStrLn "Hello, World!" -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/asPatternMatch view
@@ -1,3 +1,6 @@-{"car":{"car":1,"cdr":{"car":2,"cdr":{"car":3,"cdr":null}}},"cdr":{"car":{"car":1,"cdr":{"car":2,"cdr":{"car":3,"cdr":null}}},"cdr":null}}-{"car":{"car":1,"cdr":{"car":2,"cdr":{"car":3,"cdr":null}}},"cdr":{"car":1,"cdr":{"car":{"car":2,"cdr":{"car":3,"cdr":null}},"cdr":null}}}-{"car":{"car":1,"cdr":{"car":2,"cdr":{"car":3,"cdr":null}}},"cdr":{"car":1,"cdr":{"car":{"car":2,"cdr":{"car":3,"cdr":null}},"cdr":null}}}+{ car: { car: 1, cdr: { car: 2, cdr: [Object] } },+ cdr: { car: { car: 1, cdr: [Object] }, cdr: null } }+{ car: { car: 1, cdr: { car: 2, cdr: [Object] } },+ cdr: { car: 1, cdr: { car: [Object], cdr: null } } }+{ car: { car: 1, cdr: { car: 2, cdr: [Object] } },+ cdr: { car: 1, cdr: { car: [Object], cdr: null } } }
tests/asPatternMatch.hs view
@@ -1,8 +1,3 @@---module AsPatternMatch where--import Language.Fay.FFI import Language.Fay.Prelude matchSame :: [a] -> ([a],[a])@@ -14,11 +9,8 @@ matchNested :: (a, [b]) -> ([b],b,[b]) matchNested (a,b@(x:xs)) = (b,x,xs) -print :: String -> Fay ()-print = ffi "console.log(%1)"- main :: Fay () main = do- print $ show $ matchSame [1,2,3]- print $ show $ matchSplit [1,2,3]- print $ show $ matchNested (1, [1,2,3])+ print $ matchSame [1,2,3]+ print $ matchSplit [1,2,3]+ print $ matchNested (1, [1,2,3])
tests/basicFunctions.hs view
@@ -1,11 +1,6 @@---module BasicFunctions where--import Language.Fay.FFI import Language.Fay.Prelude -main = print (concat' ["Hello, ","World!"])+main = putStrLn (concat' ["Hello, ","World!"]) concat' = foldr' append [] @@ -15,5 +10,3 @@ append (x:xs) ys = x : append xs ys append [] ys = ys -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/case.hs view
@@ -1,13 +1,6 @@---module Case where--import Language.Fay.FFI import Language.Fay.Prelude -main = print (case True of- True -> "Hello!"- False -> "Ney!")+main = putStrLn (case True of+ True -> "Hello!"+ False -> "Ney!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/case2.hs view
@@ -1,13 +1,6 @@---module Case2 where--import Language.Fay.FFI import Language.Fay.Prelude -main = print (case False of- True -> "Hello!"- False -> "Ney!")+main = putStrLn (case False of+ True -> "Hello!"+ False -> "Ney!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/caseList.hs view
@@ -1,15 +1,8 @@---module CaseList where--import Language.Fay.FFI import Language.Fay.Prelude -main = print (case [1,2,3,4,5] of+main = putStrLn (case [1,2,3,4,5] of [1,2,3,4,6] -> "6!" [1,2,4,2,4] -> "a!" [1,2,3,4,5] -> "OK." _ -> "Broken.") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/caseWildcard.hs view
@@ -1,13 +1,6 @@---module CaseWildCard where--import Language.Fay.FFI import Language.Fay.Prelude -main = print (case False of- True -> "Hello!"- _ -> "Ney!")+main = putStrLn (case False of+ True -> "Hello!"+ _ -> "Ney!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/do.hs view
@@ -1,11 +1,4 @@---module Do where--import Language.Fay.FFI import Language.Fay.Prelude -main = do print "Hello,"; print "World!"+main = do putStrLn "Hello,"; putStrLn "World!" -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/doAssingPatternMatch.hs view
@@ -1,13 +1,6 @@---module DoAssignPatternMatch where--import Language.Fay.FFI import Language.Fay.Prelude main = do [1,2] <- return [1,2]- print "OK."+ putStrLn "OK." -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/doBindAssign.hs view
@@ -1,13 +1,6 @@---module DoBindAssign where--import Language.Fay.FFI import Language.Fay.Prelude main = do x <- return "Hello, World!" >>= return- print x+ putStrLn x -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/emptyMain.hs view
@@ -1,8 +1,3 @@---module EmptyMain where--import Language.Fay.FFI import Language.Fay.Prelude main = return ()
tests/fix.hs view
@@ -1,14 +1,6 @@---module Fix where--import Language.Fay.FFI import Language.Fay.Prelude main = print (head (tail (fix (\xs -> 123 : xs))))--print :: Double -> Fay ()-print = ffi "console.log(%1)" head (x:xs) = x
tests/fromInteger.hs view
@@ -1,12 +1,4 @@---module FromInteger where--import Language.Fay.FFI import Language.Fay.Prelude -print :: String -> Fay ()-print = ffi "console.log(%1)"- main :: Fay ()-main = print $ show $ fromInteger 5+main = putStrLn $ show $ fromInteger 5
tests/infixDataConst.hs view
@@ -1,11 +1,5 @@---module Test where--import Language.Fay.FFI import Language.Fay.Prelude - data Ty1 = Integer `InfixConst1` Integer instance Foreign Ty1 @@ -19,5 +13,3 @@ main = print t -print :: Ty3 -> Fay ()-print = ffi "console.log(%1)"
tests/ints.hs view
@@ -1,13 +1,5 @@---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
@@ -2,9 +2,6 @@ {-# LANGUAGE EmptyDataDecls #-} --module MutableReference where- import Language.Fay.FFI import Language.Fay.Prelude @@ -13,7 +10,7 @@ ref <- newRef "Hello, World!" x <- readRef ref writeRef ref "Hai!"- readRef ref >>= print+ readRef ref >>= putStrLn data Ref a instance Show (Ref a)@@ -28,5 +25,3 @@ readRef :: Foreign a => Ref a -> Fay a readRef = ffi "Fay$$readRef(%1)" -print :: String -> Fay ()-print = ffi "console.log(%1)"
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,12 +1,9 @@ {-# LANGUAGE FlexibleInstances #-} --module PatternGuards where- -- | As pattern matches -import Language.Fay.FFI import Language.Fay.Prelude+import Language.Fay.FFI isPositive :: Double -> Bool isPositive x | x > 0 = True@@ -22,13 +19,12 @@ -- Not called, throws "non-exhaustive guard" nonExhaustive x | x > 1 = True -printD :: [Double] -> Fay ()-printD = ffi "console.log(%1)"-printB :: [Bool] -> Fay ()-printB = ffi "console.log(%1)"- main :: Fay () main = do- printB [isPositive 1, isPositive 0]- printD [threeConds 3, threeConds 1, threeConds 0]- printB [withOtherwise 2, withOtherwise 0]+ putStrLn $ showList [isPositive 1, isPositive 0]+ putStrLn $ showList [threeConds 3, threeConds 1, threeConds 0]+ putStrLn $ showList [withOtherwise 2, withOtherwise 0]++showList :: [a] -> String+showList = ffi "JSON.stringify(%1)"+
tests/patternMatchFail.hs view
@@ -1,11 +1,4 @@---module PatternMatchFail where--import Language.Fay.FFI import Language.Fay.Prelude -main = print ((\a 'a' -> "OK.") 0 'b')+main = putStrLn ((\a 'a' -> "OK.") 0 'b') -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/recordFunctionPatternMatch.hs view
@@ -1,18 +1,11 @@---module RecordFunctionPatternMatch where--import Language.Fay.FFI import Language.Fay.Prelude data Person = Person String String Int -main = print (foo (Person "Chris" "Done" 14))+main = putStrLn (foo (Person "Chris" "Done" 14)) foo (Person "Chris" "Done" 13) = "Foo!" foo (Person "Chris" "Barf" 14) = "Bar!" foo (Person "Chris" "Done" 14) = "Hello!" foo _ = "World!" -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/recordPatternMatch.hs view
@@ -1,15 +1,8 @@---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- Person "Chris" "Done" 13 -> "Hello!"- _ -> "World!")+main = putStrLn (case Person "Chris" "Done" 14 of+ Person "Chris" "Done" 13 -> "Hello!"+ _ -> "World!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/recordPatternMatch2.hs view
@@ -1,17 +1,10 @@---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- Person "Chris" "Done" 13 -> "Foo!"- Person "Chris" "Barf" 14 -> "Bar!"- Person "Chris" "Done" 14 -> "Hello!"- _ -> "World!")+main = putStrLn (case Person "Chris" "Done" 14 of+ Person "Chris" "Done" 13 -> "Foo!"+ Person "Chris" "Barf" 14 -> "Bar!"+ Person "Chris" "Done" 14 -> "Hello!"+ _ -> "World!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/recordUseBeforeDefine.hs view
@@ -1,8 +1,3 @@---module RecordUseBeforeDefine where--import Language.Fay.FFI import Language.Fay.Prelude import Hierarchical.RecordDefined@@ -16,5 +11,3 @@ data R = R Double -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/records.hs view
@@ -1,8 +1,3 @@---module Records where--import Language.Fay.FFI import Language.Fay.Prelude data Person1 = Person1 String String Int@@ -15,10 +10,8 @@ p3 = Person3 "Chris" "Done" 13 main = do- print (case p1 of Person1 "Chris" "Done" 13 -> "Hello!")- print (case p2 of Person2 "Chris" "Done" 13 -> "Hello!")- print (case p2a of Person2 "Chris" "Done" 13 -> "Hello!")- print (case p3 of Person3 "Chris" "Done" 13 -> "Hello!")+ putStrLn (case p1 of Person1 "Chris" "Done" 13 -> "Hello!")+ putStrLn (case p2 of Person2 "Chris" "Done" 13 -> "Hello!")+ putStrLn (case p2a of Person2 "Chris" "Done" 13 -> "Hello!")+ putStrLn (case p3 of Person3 "Chris" "Done" 13 -> "Hello!") -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/reservedWords.hs view
@@ -1,51 +1,46 @@ {-# LANGUAGE EmptyDataDecls #-} --module ReservedWords where--import Language.Fay.FFI import Language.Fay.Prelude main = do -- All reserved words- let break = "break" in printS break- let catch = "catch" in printS catch- let const = "const" in printS const- let continue = "continue" in printS continue- let debugger = "debugger" in printS debugger- let delete = "delete" in printS delete- let enum = "enum" in printS enum- let export = "export" in printS export- let extends = "extends" in printS extends- let finally = "finally" in printS finally- let for = "for" in printS for- let function = "function" in printS function- let implements = "implements" in printS implements- let instanceof = "instanceof" in printS instanceof- let interface = "interface" in printS interface- let new = "new" in printS new- let null = "null" in printS null- let package = "package" in printS package- let private = "private" in printS private- let protected = "protected" in printS protected- let public = "public" in printS public- let return = "return" in printS return- let static = "static" in printS static- let super = "super" in printS super- let switch = "switch" in printS switch- let this = "this" in printS this- let throw = "throw" in printS throw- let try = "try" in printS try- let typeof = "typeof" in printS typeof- let undefined = "undefined" in printS undefined- let var = "var" in printS var- let void = "void" in printS void- let while = "while" in printS while- let with = "with" in printS with- let yield = "yield" in printS yield+ let break = "break" in putStrLn break+ let catch = "catch" in putStrLn catch+ let const = "const" in putStrLn const+ let continue = "continue" in putStrLn continue+ let debugger = "debugger" in putStrLn debugger+ let delete = "delete" in putStrLn delete+ let enum = "enum" in putStrLn enum+ let export = "export" in putStrLn export+ let extends = "extends" in putStrLn extends+ let finally = "finally" in putStrLn finally+ let for = "for" in putStrLn for+ let function = "function" in putStrLn function+ let implements = "implements" in putStrLn implements+ let instanceof = "instanceof" in putStrLn instanceof+ let interface = "interface" in putStrLn interface+ let new = "new" in putStrLn new+ let null = "null" in putStrLn null+ let package = "package" in putStrLn package+ let private = "private" in putStrLn private+ let protected = "protected" in putStrLn protected+ let public = "public" in putStrLn public+ let return = "return" in putStrLn return+ let static = "static" in putStrLn static+ let super = "super" in putStrLn super+ let switch = "switch" in putStrLn switch+ let this = "this" in putStrLn this+ let throw = "throw" in putStrLn throw+ let try = "try" in putStrLn try+ let typeof = "typeof" in putStrLn typeof+ let undefined = "undefined" in putStrLn undefined+ let var = "var" in putStrLn var+ let void = "void" in putStrLn void+ let while = "while" in putStrLn while+ let with = "with" in putStrLn with+ let yield = "yield" in putStrLn yield - printS ""+ putStrLn "" -- Stdlib functions that need to be encoded- printS $ const "stdconst" 2-printS :: String -> Fay ()-printS = ffi "console.log(%1)"+ putStrLn $ const "stdconst" 2+
tests/tailRecursion.hs view
@@ -1,17 +1,9 @@ -- | This is to test tail-recursive calls are iterative.----module Tail where--import Language.Fay.FFI import Language.Fay.Prelude main = do- print (sum 100000 0 :: Double)+ print (sumTo 100000 0 :: Double) -sum 0 acc = acc-sum n acc = sum (n - 1) (acc + n)+sumTo 0 acc = acc+sumTo n acc = sumTo (n - 1) (acc + n) -print :: Double -> Fay ()-print = ffi "console.log(%1)"
tests/then.hs view
@@ -1,11 +1,4 @@---module Then where--import Language.Fay.FFI import Language.Fay.Prelude -main = print "Hello," >> print "World!"+main = putStrLn "Hello," >> putStrLn "World!" -print :: String -> Fay ()-print = ffi "console.log(%1)"
tests/utf8.hs view
@@ -2,138 +2,133 @@ -- | Unicode test. -module Utf8 where--import Language.Fay.FFI import Language.Fay.Prelude main :: Fay () main = do -- Latin-1 Supplement- printS "¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ"+ putStrLn "¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ" -- Latin Extended-A- printS "Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ"+ putStrLn "Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ" -- Latin Extended-B- printS "ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ ..."+ putStrLn "ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ ..." -- IPA Extensions- printS "ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ"+ putStrLn "ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ" -- Spacing Modifier Letters- printS "ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩"+ putStrLn "ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩" -- Combining Diacritical Marks- printS "̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͠ ͡"+ putStrLn "̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͠ ͡" -- Greek- printS "ʹ ͵ ͺ ; ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϐ ϑ ϒ ϓ ϔ ϕ ϖ Ϛ Ϝ Ϟ Ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ"+ putStrLn "ʹ ͵ ͺ ; ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϐ ϑ ϒ ϓ ϔ ϕ ϖ Ϛ Ϝ Ϟ Ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ" -- Cyrillic- printS "Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ў Џ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ў џ Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ Ҁ ҁ ҂ ҃ ..."+ putStrLn "Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ў Џ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ў џ Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ Ҁ ҁ ҂ ҃ ..." -- Armenian- printS "Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Ն Շ Ո Չ Պ Ջ Ռ Ս Վ Տ Ր Ց Ւ Փ Ք Օ Ֆ ՙ ՚ ՛ ՜ ՝ ՞ ՟ ա բ գ դ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ ջ ռ ս վ տ ր ց ւ փ ք օ ֆ և ։"+ putStrLn "Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Ն Շ Ո Չ Պ Ջ Ռ Ս Վ Տ Ր Ց Ւ Փ Ք Օ Ֆ ՙ ՚ ՛ ՜ ՝ ՞ ՟ ա բ գ դ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ ջ ռ ս վ տ ր ց ւ փ ք օ ֆ և ։" -- Hebrew- printS "֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝ ֞ ֟ ֠ ֡ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֻ ּ ֽ ־ ֿ ׀ ׁ ׂ ׃ ׄ א ב ג ד ה ו ז ח ט י ך כ ל ם מ ן נ ס ע ף פ ץ צ ק ר ש ת װ ױ ײ ׳ ״"+ putStrLn "֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝ ֞ ֟ ֠ ֡ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֻ ּ ֽ ־ ֿ ׀ ׁ ׂ ׃ ׄ א ב ג ד ה ו ז ח ט י ך כ ל ם מ ן נ ס ע ף פ ץ צ ק ר ש ת װ ױ ײ ׳ ״" -- Arabic- printS "، ؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ..."+ putStrLn "، ؛ ؟ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ـ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ..." -- Devanagari- printS "ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न ऩ प फ ब भ म य र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॊ ो ौ ् ॐ ॑ ॒ ॓ ॔ क़ ख़ ग़ ज़ ड़ ढ़ फ़ य़ ॠ ॡ ॢ ॣ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॰"+ putStrLn "ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न ऩ प फ ब भ म य र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॊ ो ौ ् ॐ ॑ ॒ ॓ ॔ क़ ख़ ग़ ज़ ड़ ढ़ फ़ य़ ॠ ॡ ॢ ॣ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॰" -- Bengali- printS "ঁ ং ঃ অ আ ই ঈ উ ঊ ঋ ঌ এ ঐ ও ঔ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ ় া ি ী ু ূ ৃ ৄ ে ৈ ো ৌ ্ ৗ ড় ঢ় য় ৠ ৡ ৢ ৣ ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ৰ ৱ ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৺"+ putStrLn "ঁ ং ঃ অ আ ই ঈ উ ঊ ঋ ঌ এ ঐ ও ঔ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ ় া ি ী ু ূ ৃ ৄ ে ৈ ো ৌ ্ ৗ ড় ঢ় য় ৠ ৡ ৢ ৣ ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ৰ ৱ ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৺" -- Gurmukhi- printS "ਂ ਅ ਆ ਇ ਈ ਉ ਊ ਏ ਐ ਓ ਔ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਲ਼ ਵ ਸ਼ ਸ ਹ ਼ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ ੍ ਖ਼ ਗ਼ ਜ਼ ੜ ਫ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੰ ੱ ੲ ੳ ੴ"+ putStrLn "ਂ ਅ ਆ ਇ ਈ ਉ ਊ ਏ ਐ ਓ ਔ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਲ਼ ਵ ਸ਼ ਸ ਹ ਼ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ ੍ ਖ਼ ਗ਼ ਜ਼ ੜ ਫ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੰ ੱ ੲ ੳ ੴ" -- Gujarati- printS "ઁ ં ઃ અ આ ઇ ઈ ઉ ઊ ઋ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ ળ વ શ ષ સ હ ઼ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્ ૐ ૠ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯"+ putStrLn "ઁ ં ઃ અ આ ઇ ઈ ઉ ઊ ઋ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ ળ વ શ ષ સ હ ઼ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્ ૐ ૠ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯" -- Oriya- printS "ଁ ଂ ଃ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଌ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ର ଲ ଳ ଶ ଷ ସ ହ ଼ ଽ ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍ ୖ ୗ ଡ଼ ଢ଼ ୟ ୠ ୡ ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ ୰"+ putStrLn "ଁ ଂ ଃ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଌ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ର ଲ ଳ ଶ ଷ ସ ହ ଼ ଽ ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍ ୖ ୗ ଡ଼ ଢ଼ ୟ ୠ ୡ ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ ୰" -- Tamil- printS "ஂ ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲"+ putStrLn "ஂ ஃ அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஜ ஞ ட ண த ந ன ப ம ய ர ற ல ள ழ வ ஷ ஸ ஹ ா ி ீ ு ூ ெ ே ை ொ ோ ௌ ் ௗ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲" -- Telugu- printS "ఁ ం ః అ ఆ ఇ ఈ ఉ ఊ ఋ ఌ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల ళ వ శ ష స హ ా ి ీ ు ూ ృ ౄ ె ే ై ొ ో ౌ ్ ౕ ౖ ౠ ౡ ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯"+ putStrLn "ఁ ం ః అ ఆ ఇ ఈ ఉ ఊ ఋ ఌ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల ళ వ శ ష స హ ా ి ీ ు ూ ృ ౄ ె ే ై ొ ో ౌ ్ ౕ ౖ ౠ ౡ ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯" -- Kannada- printS "ಂ ಃ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ಌ ಎ ಏ ಐ ಒ ಓ ಔ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ಳ ವ ಶ ಷ ಸ ಹ ಾ ಿ ೀ ು ೂ ೃ ೄ ೆ ೇ ೈ ೊ ೋ ೌ ್ ೕ ೖ ೞ ೠ ೡ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯"+ putStrLn "ಂ ಃ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ಌ ಎ ಏ ಐ ಒ ಓ ಔ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ಳ ವ ಶ ಷ ಸ ಹ ಾ ಿ ೀ ು ೂ ೃ ೄ ೆ ೇ ೈ ೊ ೋ ೌ ್ ೕ ೖ ೞ ೠ ೡ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯" -- Malayalam- printS "ം ഃ അ ആ ഇ ഈ ഉ ഊ ഋ ഌ എ ഏ ഐ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ യ ര റ ല ള ഴ വ ശ ഷ സ ഹ ാ ി ീ ു ൂ ൃ െ േ ൈ ൊ ോ ൌ ് ൗ ൠ ൡ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯"+ putStrLn "ം ഃ അ ആ ഇ ഈ ഉ ഊ ഋ ഌ എ ഏ ഐ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ യ ര റ ല ള ഴ വ ശ ഷ സ ഹ ാ ി ീ ു ൂ ൃ െ േ ൈ ൊ ോ ൌ ് ൗ ൠ ൡ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯" -- Thai- printS "ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ ั า ำ ิ ี ึ ื ุ ู ฺ ฿ เ แ โ ใ ไ ๅ ๆ ็ ่ ้ ๊ ๋ ์ ํ ๎ ๏ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๚ ๛"+ putStrLn "ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ ั า ำ ิ ี ึ ื ุ ู ฺ ฿ เ แ โ ใ ไ ๅ ๆ ็ ่ ้ ๊ ๋ ์ ํ ๎ ๏ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๚ ๛" -- Lao- printS "ກ ຂ ຄ ງ ຈ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ສ ຫ ອ ຮ ຯ ະ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ົ ຼ ຽ ເ ແ ໂ ໃ ໄ ໆ ່ ້ ໊ ໋ ໌ ໍ ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ ໜ ໝ"+ putStrLn "ກ ຂ ຄ ງ ຈ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ສ ຫ ອ ຮ ຯ ະ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ົ ຼ ຽ ເ ແ ໂ ໃ ໄ ໆ ່ ້ ໊ ໋ ໌ ໍ ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ ໜ ໝ" -- Tibetan- printS "ༀ ༁ ༂ ༃ ༄ ༅ ༆ ༇ ༈ ༉ ༊ ་ ༌ ། ༎ ༏ ༐ ༑ ༒ ༓ ༔ ༕ ༖ ༗ ༘ ༙ ༚ ༛ ༜ ༝ ༞ ༟ ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ༴ ༵ ༶ ༷ ༸ ༹ ༺ ༻ ༼ ༽ ༾ ༿ ཀ ཁ ག གྷ ང ཅ ཆ ཇ ཉ ཊ ཋ ཌ ཌྷ ཎ ཏ ཐ ད དྷ ན པ ཕ བ བྷ མ ཙ ཚ ཛ ཛྷ ཝ ཞ ཟ འ ཡ ར ལ ཤ ཥ ས ཧ ཨ ཀྵ ཱ ི ཱི ུ ཱུ ྲྀ ཷ ླྀ ཹ ེ ཻ ོ ཽ ཾ ཿ ྀ ཱྀ ྂ ྃ ྄ ྅ ྆ ྇ ..."+ putStrLn "ༀ ༁ ༂ ༃ ༄ ༅ ༆ ༇ ༈ ༉ ༊ ་ ༌ ། ༎ ༏ ༐ ༑ ༒ ༓ ༔ ༕ ༖ ༗ ༘ ༙ ༚ ༛ ༜ ༝ ༞ ༟ ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ༴ ༵ ༶ ༷ ༸ ༹ ༺ ༻ ༼ ༽ ༾ ༿ ཀ ཁ ག གྷ ང ཅ ཆ ཇ ཉ ཊ ཋ ཌ ཌྷ ཎ ཏ ཐ ད དྷ ན པ ཕ བ བྷ མ ཙ ཚ ཛ ཛྷ ཝ ཞ ཟ འ ཡ ར ལ ཤ ཥ ས ཧ ཨ ཀྵ ཱ ི ཱི ུ ཱུ ྲྀ ཷ ླྀ ཹ ེ ཻ ོ ཽ ཾ ཿ ྀ ཱྀ ྂ ྃ ྄ ྅ ྆ ྇ ..." -- Georgian- printS "Ⴀ Ⴁ Ⴂ Ⴃ Ⴄ Ⴅ Ⴆ Ⴇ Ⴈ Ⴉ Ⴊ Ⴋ Ⴌ Ⴍ Ⴎ Ⴏ Ⴐ Ⴑ Ⴒ Ⴓ Ⴔ Ⴕ Ⴖ Ⴗ Ⴘ Ⴙ Ⴚ Ⴛ Ⴜ Ⴝ Ⴞ Ⴟ Ⴠ Ⴡ Ⴢ Ⴣ Ⴤ Ⴥ ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ ჱ ჲ ჳ ჴ ჵ ჶ ჻"+ putStrLn "Ⴀ Ⴁ Ⴂ Ⴃ Ⴄ Ⴅ Ⴆ Ⴇ Ⴈ Ⴉ Ⴊ Ⴋ Ⴌ Ⴍ Ⴎ Ⴏ Ⴐ Ⴑ Ⴒ Ⴓ Ⴔ Ⴕ Ⴖ Ⴗ Ⴘ Ⴙ Ⴚ Ⴛ Ⴜ Ⴝ Ⴞ Ⴟ Ⴠ Ⴡ Ⴢ Ⴣ Ⴤ Ⴥ ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ ჱ ჲ ჳ ჴ ჵ ჶ ჻" -- Hangul Jamo- printS "ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᄓ ᄔ ᄕ ᄖ ᄗ ᄘ ᄙ ᄚ ᄛ ᄜ ᄝ ᄞ ᄟ ᄠ ᄡ ᄢ ᄣ ᄤ ᄥ ᄦ ᄧ ᄨ ᄩ ᄪ ᄫ ᄬ ᄭ ᄮ ᄯ ᄰ ᄱ ᄲ ᄳ ᄴ ᄵ ᄶ ᄷ ᄸ ᄹ ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ᅀ ᅁ ᅂ ᅃ ᅄ ᅅ ᅆ ᅇ ᅈ ᅉ ᅊ ᅋ ᅌ ᅍ ᅎ ᅏ ᅐ ᅑ ᅒ ᅓ ᅔ ᅕ ᅖ ᅗ ᅘ ᅙ ᅟ ᅠ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᅶ ᅷ ᅸ ᅹ ᅺ ᅻ ᅼ ᅽ ᅾ ᅿ ᆀ ᆁ ᆂ ᆃ ᆄ ..."+ putStrLn "ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᄓ ᄔ ᄕ ᄖ ᄗ ᄘ ᄙ ᄚ ᄛ ᄜ ᄝ ᄞ ᄟ ᄠ ᄡ ᄢ ᄣ ᄤ ᄥ ᄦ ᄧ ᄨ ᄩ ᄪ ᄫ ᄬ ᄭ ᄮ ᄯ ᄰ ᄱ ᄲ ᄳ ᄴ ᄵ ᄶ ᄷ ᄸ ᄹ ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ᅀ ᅁ ᅂ ᅃ ᅄ ᅅ ᅆ ᅇ ᅈ ᅉ ᅊ ᅋ ᅌ ᅍ ᅎ ᅏ ᅐ ᅑ ᅒ ᅓ ᅔ ᅕ ᅖ ᅗ ᅘ ᅙ ᅟ ᅠ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᅶ ᅷ ᅸ ᅹ ᅺ ᅻ ᅼ ᅽ ᅾ ᅿ ᆀ ᆁ ᆂ ᆃ ᆄ ..." -- Latin Extended Additional- printS "Ḁ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ Ḓ ḓ Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ ḽ Ḿ ḿ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ Ṑ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṥ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ ..."+ putStrLn "Ḁ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ Ḓ ḓ Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ ḽ Ḿ ḿ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ Ṑ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṥ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ ..." -- Greek Extended- printS "ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ ἐ ἑ ἒ ἓ ἔ ἕ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ ὀ ὁ ὂ ὃ ὄ ὅ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ Ὑ Ὓ Ὕ Ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ..."+ putStrLn "ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ ἐ ἑ ἒ ἓ ἔ ἕ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ ὀ ὁ ὂ ὃ ὄ ὅ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ Ὑ Ὓ Ὕ Ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ..." -- General Punctuation- printS "‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “ ” „ ‟"+ putStrLn "‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “ ” „ ‟" -- Superscripts and Subscripts- printS "⁰ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎"+ putStrLn "⁰ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎" -- Currency Symbols- printS "₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨ ₩ ₪ ₫"+ putStrLn "₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨ ₩ ₪ ₫" -- Combining Marks for Symbols- printS "⃐ ⃑ ⃒ ⃓ ⃔ ⃕ ⃖ ⃗ ⃘ ⃙ ⃚ ⃛ ⃜ ⃝ ⃞ ⃟ ⃠ ⃡"+ putStrLn "⃐ ⃑ ⃒ ⃓ ⃔ ⃕ ⃖ ⃗ ⃘ ⃙ ⃚ ⃛ ⃜ ⃝ ⃞ ⃟ ⃠ ⃡" -- Letterlike Symbols- printS "℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ"+ putStrLn "℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ" -- Number Forms- printS "⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ"+ putStrLn "⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ" -- Arrows- printS "← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪"+ putStrLn "← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪" -- Mathematical Operators- printS "∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ..."+ putStrLn "∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ..." -- Miscellaneous Technical- printS "⌀ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨ 〈 〉 ⌫ ⌬ ⌭ ⌮ ⌯ ⌰ ⌱ ⌲ ⌳ ⌴ ⌵ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺"+ putStrLn "⌀ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨ 〈 〉 ⌫ ⌬ ⌭ ⌮ ⌯ ⌰ ⌱ ⌲ ⌳ ⌴ ⌵ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺" -- Control Pictures- printS "␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␠ ␡ ␢ ␣ "+ putStrLn "␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␠ ␡ ␢ ␣ " -- Optical Character Recognition- printS "⑀ ⑁ ⑂ ⑃ ⑄ ⑅ ⑆ ⑇ ⑈ ⑉ ⑊"+ putStrLn "⑀ ⑁ ⑂ ⑃ ⑄ ⑅ ⑆ ⑇ ⑈ ⑉ ⑊" -- -- Enclosed Alphanumerics- printS "① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ..."+ putStrLn "① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ..." -- Box Drawing- printS "─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿"+ putStrLn "─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿" -- Block Elements- printS "▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔ ▕"+ putStrLn "▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔ ▕" -- Geometric Shapes- printS "■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯"+ putStrLn "■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯" -- Miscellaneous Symbols- printS "☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☚ ☛ ☜ ☝ ☞ ☟ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯"+ putStrLn "☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☚ ☛ ☜ ☝ ☞ ☟ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯" -- Dingbats- printS "✁ ✂ ✃ ✄ ✆ ✇ ✈ ✉ ✌ ✍ ✎ ✏ ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ..."+ putStrLn "✁ ✂ ✃ ✄ ✆ ✇ ✈ ✉ ✌ ✍ ✎ ✏ ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ..." -- CJK Symbols and Punctuation- printS " 、 。 〃 〄 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 〠 〡 〢 〣 〤 〥 〦 〧 〨 〩 〪 〫 〬 〭 〮 〯 〰 〱 〲 〳 〴 〵 〶 〷 〿"+ putStrLn " 、 。 〃 〄 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 〠 〡 〢 〣 〤 〥 〦 〧 〨 〩 〪 〫 〬 〭 〮 〯 〰 〱 〲 〳 〴 〵 〶 〷 〿" -- Hiragana- printS "ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゙ ゚ ゛ ゜ ゝ ゞ"+ putStrLn "ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゙ ゚ ゛ ゜ ゝ ゞ" -- Katakana- printS "ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ ・ ー ヽ ヾ"+ putStrLn "ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ ・ ー ヽ ヾ" -- Bopomofo- printS "ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ㄪ ㄫ ㄬ"+ putStrLn "ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ㄪ ㄫ ㄬ" -- Hangul Compatibility Jamo- printS "ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ"+ putStrLn "ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ" -- Kanbun- printS "㆐ ㆑ ㆒ ㆓ ㆔ ㆕ ㆖ ㆗ ㆘ ㆙ ㆚ ㆛ ㆜ ㆝ ㆞ ㆟"+ putStrLn "㆐ ㆑ ㆒ ㆓ ㆔ ㆕ ㆖ ㆗ ㆘ ㆙ ㆚ ㆛ ㆜ ㆝ ㆞ ㆟" -- Enclosed CJK Letters and Months- printS "㈀ ㈁ ㈂ ㈃ ㈄ ㈅ ㈆ ㈇ ㈈ ㈉ ㈊ ㈋ ㈌ ㈍ ㈎ ㈏ ㈐ ㈑ ㈒ ㈓ ㈔ ㈕ ㈖ ㈗ ㈘ ㈙ ㈚ ㈛ ㈜ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㈰ ㈱ ㈲ ㈳ ㈴ ㈵ ㈶ ㈷ ㈸ ㈹ ㈺ ㈻ ㈼ ㈽ ㈾ ㈿ ㉀ ㉁ ㉂ ㉃ ㉠ ㉡ ㉢ ㉣ ㉤ ㉥ ㉦ ㉧ ㉨ ㉩ ㉪ ㉫ ㉬ ㉭ ㉮ ㉯ ㉰ ㉱ ㉲ ㉳ ㉴ ㉵ ㉶ ㉷ ㉸ ㉹ ㉺ ㉻ ㉿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㊊ ㊋ ㊌ ㊍ ㊎ ㊏ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊙ ㊚ ㊛ ㊜ ㊝ ㊞ ㊟ ㊠ ㊡ ..."+ putStrLn "㈀ ㈁ ㈂ ㈃ ㈄ ㈅ ㈆ ㈇ ㈈ ㈉ ㈊ ㈋ ㈌ ㈍ ㈎ ㈏ ㈐ ㈑ ㈒ ㈓ ㈔ ㈕ ㈖ ㈗ ㈘ ㈙ ㈚ ㈛ ㈜ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㈰ ㈱ ㈲ ㈳ ㈴ ㈵ ㈶ ㈷ ㈸ ㈹ ㈺ ㈻ ㈼ ㈽ ㈾ ㈿ ㉀ ㉁ ㉂ ㉃ ㉠ ㉡ ㉢ ㉣ ㉤ ㉥ ㉦ ㉧ ㉨ ㉩ ㉪ ㉫ ㉬ ㉭ ㉮ ㉯ ㉰ ㉱ ㉲ ㉳ ㉴ ㉵ ㉶ ㉷ ㉸ ㉹ ㉺ ㉻ ㉿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㊊ ㊋ ㊌ ㊍ ㊎ ㊏ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊙ ㊚ ㊛ ㊜ ㊝ ㊞ ㊟ ㊠ ㊡ ..." -- CJK Compatibility- printS "㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍻ ㍼ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ..."+ putStrLn "㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍻ ㍼ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ..." -- CJK Unified Ideographs- printS "一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ..."+ putStrLn "一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 ..." -- Hangul Syllables- printS "가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ..."+ putStrLn "가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 ..." -- CJK Compatibility Ideographs- printS "豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ..."+ putStrLn "豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 ..." -- Alphabetic Presentation Forms- printS "ff fi fl ffi ffl ſt st ﬓ ﬔ ﬕ ﬖ ﬗ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ טּ יּ ךּ כּ לּ מּ נּ סּ ףּ פּ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ"+ putStrLn "ff fi fl ffi ffl ſt st ﬓ ﬔ ﬕ ﬖ ﬗ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ טּ יּ ךּ כּ לּ מּ נּ סּ ףּ פּ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ" -- Arabic Presentation Forms-A- printS "ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ..."+ putStrLn "ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ..." -- Combining Half Marks- printS "︠ ︡ ︢ ︣"+ putStrLn "︠ ︡ ︢ ︣" -- CJK Compatibility Forms- printS "︰ ︱ ︲ ︳ ︴ ︵ ︶ ︷ ︸ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹉ ﹊ ﹋ ﹌ ﹍ ﹎ ﹏"+ putStrLn "︰ ︱ ︲ ︳ ︴ ︵ ︶ ︷ ︸ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹉ ﹊ ﹋ ﹌ ﹍ ﹎ ﹏" -- Small Form Variants- printS "﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫"+ putStrLn "﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫" -- Arabic Presentation Forms-B- printS "ﹰ ﹱ ﹲ ﹴ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ..."+ putStrLn "ﹰ ﹱ ﹲ ﹴ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ..." -- Halfwidth and Fullwidth Forms- printS "! " # $ % & ' ( ) * + , - . / 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 { | } ~ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ ..."+ putStrLn "! " # $ % & ' ( ) * + , - . / 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 { | } ~ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ ..." -printS :: String -> Fay ()-printS = ffi "console.log(%1)"
tests/where.hs view
@@ -1,13 +1,6 @@---module Where where--import Language.Fay.FFI import Language.Fay.Prelude -main = print $ "Hello " ++ friends ++ family+main = putStrLn $ "Hello " ++ friends ++ family where friends = "my friends" family = " and family" -print :: String -> Fay ()-print = ffi "console.log(%1)"