Skip to content

Instantly share code, notes, and snippets.

@dckc
Last active August 29, 2015 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dckc/10440931 to your computer and use it in GitHub Desktop.
Save dckc/10440931 to your computer and use it in GitHub Desktop.
purescript struggles
module Main where
import Control.Monad.Eff
import Data.Array
import Debug.Trace
main = trace "Hello, World!"
service dev endpoint = do
trace "awaiting connection..."
handle { target: endpoint, tag: "connection", handler: \conn -> do
trace "got connection!"
trace "awaiting foot pedal event..."
handle { target: dev, tag: "data", handler: \chunk -> do
let event = decode chunk
trace "@@$ serialize event"
conn.send serialize event
}}
foreign import serialize
"function serialize(obj) { return JSON.stringify(obj) }" :: {} -> String
foreign import data WindowIO :: !
foreign import handle
"function handle(it) { it.target.on(it.tag, it.handler) }" ::
forall t h e. { target:: t,
tag:: String,
handler:: h } -> Eff (io :: WindowIO | e) {}
type PedalState = {pedal:: Number, pressed:: Number}
decode :: [Number] -> [PedalState]
decode chunk = each <$> [0, 1, 2]
where each ix = { pedal: chunk !! (ix * 8),
pressed: chunk !! (ix * 8 + 4) }
module Footpedal where
import Data.Array
import Data.Maybe
import Data.Traversable
import Data.Tuple
import Control.Applicative
import Debug.Trace
main = trace "Hello, World!"
type PedalState = {pedal:: Number, pressed:: Number}
decode :: [Number] -> Maybe [PedalState]
decode bytes = sequence $ do
ix <- range 0 2
let offset = ix * 8
return $ parts offset
where
parts :: Number -> Maybe PedalState
parts offset = do
pedal_num <- bytes !! offset
state <- bytes !! (offset + 4)
return { pedal: pedal_num, pressed: state }
@dckc
Copy link
Author

dckc commented Apr 12, 2014

>> Error at src/footpedal_vp.purs line 16, column 16: 
>> Error in declaration decode
>> Attempted to unify a constrained type (Prelude.Functor u37, Prelude.Applicative u37) => u36 (u37 u38) -> u37 (u36 u38) with another type.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment