@@ -1,11 +1,11 @@
1{-# LANGUAGE FlexibleInstances, IncoherentInstances #-}
1{-# LANGUAGE FlexibleInstances, IncoherentInstances #-}
3−module Idris.IdeSlave(receiveMessage, sendMessage) where
3+module Idris.IdeSlave(receiveMessage, sendMessage, IdeSlaveCommand(..)) where
5import Text.Printf
5import Text.Printf
6import Numeric
6import Numeric
7import Data.List
7import Data.List
8−
8+-- import qualified Data.Text as T
9import Text.Parsec
9import Text.Parsec
11data SExp = List [SExp]
11data SExp = List [SExp]
@@ -74,20 +74,22 @@ quotedChar = noneOf "\""
74parseSExp :: String -> Either ParseError SExp
74parseSExp :: String -> Either ParseError SExp
75parseSExp input = parse pSExp "(unknown)" input
75parseSExp input = parse pSExp "(unknown)" input
77−data Command = Version
77+data IdeSlaveCommand = Version
78 deriving Show
79 deriving Show
80−sexpToCommand :: SExp -> Maybe Command
81+sexpToCommand :: SExp -> Maybe IdeSlaveCommand
81−sexpToCommand (List (x:[])) = sexpToCommand x
82+sexpToCommand (List (x:[])) = sexpToCommand x
83+sexpToCommand (List [SymbolAtom "interpret", StringAtom cmd]) = Just (Interpret cmd)
82−sexpToCommand (SymbolAtom "version") = Just Version
84+sexpToCommand (SymbolAtom "version") = Just Version
83−sexpToCommand _ = Nothing
85+sexpToCommand _ = Nothing
85−receiveMessage :: IO (Maybe Command)
87+receiveMessage :: IO (Maybe IdeSlaveCommand)
86receiveMessage
88receiveMessage
87 = do x <- getLine
89 = do x <- getLine
88 return (receiveString x)
90 return (receiveString x)
90−receiveString :: String -> Maybe Command
92+receiveString :: String -> Maybe IdeSlaveCommand
91receiveString x =
93receiveString x =
92 case readHex (take 6 x) of
94 case readHex (take 6 x) of
93 ((num, ""):_) ->
95 ((num, ""):_) ->
@@ -97,7 +99,7 @@ receiveString x =
97 else parseSExpToCommand msg
99 else parseSExpToCommand msg
98 _ -> error "blah"
100 _ -> error "blah"
100−parseSExpToCommand :: String -> Maybe Command
102+parseSExpToCommand :: String -> Maybe IdeSlaveCommand
101parseSExpToCommand msg =
103parseSExpToCommand msg =
102 case parseSExp msg of
104 case parseSExp msg of
103 Left _ -> Nothing
105 Left _ -> Nothing