Skip to content

Instantly share code, notes, and snippets.

@frasertweedale
Created May 21, 2015 12:16
Show Gist options
  • Save frasertweedale/b482224b91ea7bcce35f to your computer and use it in GitHub Desktop.
Save frasertweedale/b482224b91ea7bcce35f to your computer and use it in GitHub Desktop.
YOW Lambda Jam GHCJS workshop example
{-# LANGUAGE ForeignFunctionInterface, JavaScriptFFI #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Int
import System.Timeout
import Control.Monad
import Control.Exception
import GHCJS.Types
import GHCJS.Foreign
foreign import javascript unsafe "Math.cos($1)"
js_cos :: Double -> Double
foreign import javascript unsafe "$r1 = $1_1; $r2 = $1_2;"
js_id :: Int64 -> Int64
foreign import javascript interruptible "setTimeout(function() { $c(123); }, 1000);"
js_wait :: IO Int
foreign import javascript unsafe "new XMLHttpRequest()"
js_createXHR :: IO XHR
foreign import javascript interruptible
"$2.open('GET', $1);\
\$2.onload = function() { $c($2.responseText); };\
\$2.send();"
js_sendXHR :: JSString -> XHR -> IO JSString
foreign import javascript unsafe "$1.abort();"
js_abortXHR :: XHR -> IO ()
data XHR_
type XHR = JSRef XHR_
xhr :: JSString -> IO JSString
xhr url = do
x <- js_createXHR
js_sendXHR url x `onException` js_abortXHR x
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
fib' :: Int
fib' = fib 37
main :: IO ()
main = putStrLn . fromJSString =<< xhr "/test.txt"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment