esotericbot 0.0.4 → 0.0.5
raw patch · 3 files changed
+34/−36 lines, 3 filesdep +fgldep −time
Dependencies added: fgl
Dependencies removed: time
Files
- Esotericbot/Chanop.hs +0/−1
- esotericbot.cabal +2/−2
- hs_plugins/SK.hs +32/−33
Esotericbot/Chanop.hs view
@@ -3,7 +3,6 @@ import Data.Attoparsec import Data.List.Stream as L-import Data.Time import Data.Map as M import Data.ByteString.Unsafe
esotericbot.cabal view
@@ -1,5 +1,5 @@ Name: esotericbot-Version: 0.0.4+Version: 0.0.5 License: BSD3 License-File: License Author: John Morrice <spoon@killersmurf.com>@@ -59,7 +59,7 @@ Homepage: http://www.killersmurf.com/projects/esotericbot -Build-Depends: base , bytestring , mtl , attoparsec , network , stream-fusion , stm , containers==0.2.0.0 , time , tuple , unix , directory +Build-Depends: base , bytestring , mtl , attoparsec , network , stream-fusion , stm , containers==0.2.0.0 , tuple , unix , directory , fgl Cabal-Version: >= 1.6 Other-Modules: Esotericbot.BSH Esotericbot.BSUtils
hs_plugins/SK.hs view
@@ -1,14 +1,13 @@-{-# OPTIONS -XScopedTypeVariables #-}- import Text.ParserCombinators.Parsec import System.Environment -import Data.List+import Data.List.Stream as L import Data.Maybe import Data.Graph.Inductive import qualified Data.Foldable as F +import Control.Monad.Stream as C import Control.Monad.State import Control.Arrow @@ -30,7 +29,7 @@ instance Show SKstr where show ( SKstr sks ) =- "(" ++ ( concat $ map show sks ) ++ ")"+ "(" L.++ ( L.concat $ L.map show sks ) L.++ ")" show ( ASK sk ) = show sk @@ -60,11 +59,11 @@ [ skstr ] simplify ( SKstr sks ) =- if length sks == 1+ if L.length sks == 1 then- simplify $ head sks+ simplify $ L.head sks else- SKstr $ map simplify sks+ SKstr $ L.map simplify sks simplify x = x @@ -73,9 +72,9 @@ maybe next ( \ ( sk , p ) -> do input <- suck_input sk p [ ]- if length input >= suck_level sk+ if L.length input >= suck_level sk then do- sub first red ( snd $ head p , snd $ head $ tail p ) sk input+ sub first red ( snd $ L.head p , snd $ L.head $ L.tail p ) sk input eval False red n False else next@@ -96,7 +95,7 @@ ( x , _ ) <- valueOf a case x of App ->- putGr $ insEdges ( inn oldgr n ++ ( mkEdgesFrom n $ out oldgr a ) ) $ insNode ( n , x ) $ delNode n g+ putGr $ insEdges ( inn oldgr n L.++ ( mkEdgesFrom n $ out oldgr a ) ) $ insNode ( n , x ) $ delNode n g _ -> putGr $ insEdges ( inn oldgr n ) $ insNode ( n , x ) $ delNode n g case sk of@@ -143,7 +142,7 @@ _ -> return ( ) where- mkEdgesFrom n es = map ( \ ( _ , to , v ) -> ( n , to , v ) ) es + mkEdgesFrom n es = L.map ( \ ( _ , to , v ) -> ( n , to , v ) ) es cloneNode from to = do gr <- getGr@@ -156,21 +155,21 @@ case skstr of SKstr sks -> do putGr $ insNode ( n , App ) gr - mapM_ ( joinToNode n ) sks + C.mapM_ ( joinToNode n ) sks ASK x -> putGr $ insNode ( n , x ) gr where joinToNode n sk = do gr <- getGr ( _ , seq ) <- valueOf n- let newEdge = if null seq+ let newEdge = if L.null seq then 0 - else fst ( maximum seq ) + 1- newNode = head $ newNodes 1 gr+ else fst ( L.maximum seq ) + 1+ newNode = L.head $ newNodes 1 gr case sk of SKstr sks -> do putGr $ insEdge ( n , newNode , newEdge ) $ insNode ( newNode , App ) gr- mapM_ ( joinToNode newNode ) sks+ C.mapM_ ( joinToNode newNode ) sks ASK x -> do putGr $ insEdge ( n , newNode , newEdge ) $ insNode ( newNode , x ) gr @@ -178,7 +177,7 @@ ( sk , seq ) <- valueOf n case sk of App -> do- linkedVals <- mapM node_to_str $ map snd seq+ linkedVals <- C.mapM node_to_str $ L.map snd seq return $ SKstr linkedVals _ -> return $ ASK sk@@ -189,19 +188,19 @@ in case sk of App ->- foldr cleanupNode withoutn $ map snd seq+ L.foldr cleanupNode withoutn $ L.map snd seq _ -> withoutn sk_panic msg =- error $ unlines [ "SK panic! The possible happened!!!1"+ error $ L.unlines [ "SK panic! The possible happened!!!1" , msg ] valueOf a = do gr <- getGr- maybe ( sk_panic $ "Lookup for node " ++ show a ++ " failed!" )+ maybe ( sk_panic $ "Lookup for node " L.++ show a L.++ " failed!" ) ( \ ( _ , _ , sk , sks ) -> return ( sk , sort sks ) ) ( fst $ match a gr ) @@ -211,7 +210,7 @@ then do ms <- suck_one p maybe ( return sucked ) - ( \ ( newp , s ) -> suck_input sk newp $ sucked ++ [ s ] )+ ( \ ( newp , s ) -> suck_input sk newp $ sucked L.++ [ s ] ) ms else return sucked@@ -238,32 +237,32 @@ find_term n = do terms <- first_terms ( Nothing , 0 ) [ ]- if length terms > n+ if L.length terms > n then- return $ Just $ terms !! n+ return $ Just $ terms L.!! n else return Nothing first_terms :: ( Maybe Int , Int ) -> [ ( Maybe Int , Int ) ] -> SKM [ ( SK , [ ( Maybe Int , Int ) ] ) ] first_terms addr@( maybe_edge , n ) path = do ( sk , sequence ) <- valueOf n - skterm ( if null sequence+ skterm ( if L.null sequence then return [ ] else do- ( nVal , _ ) <- valueOf $ snd $ head sequence+ ( nVal , _ ) <- valueOf $ snd $ L.head sequence skterm ( do- let tovisit = map ( first Just ) sequence- ts <- mapM ( flip first_terms ( addr : path ) ) tovisit- let just_ts = concat ts- if null just_ts+ let tovisit = L.map ( first Just ) sequence+ ts <- C.mapM ( flip first_terms ( addr : path ) ) tovisit+ let just_ts = L.concat ts+ if L.null just_ts then return [ ] else return just_ts ) ( const $ do - return [ ( nVal , ( first Just $ head sequence ) : addr : path ) ] + return [ ( nVal , ( first Just $ L.head sequence ) : addr : path ) ] ) nVal )@@ -307,7 +306,7 @@ could_suck_more sk sucked =- if length sucked >= suck_level sk+ if L.length sucked >= suck_level sk then False else@@ -315,7 +314,7 @@ main = do prog <- getContents args <- getArgs- exec_sk ( not $ null args ) prog+ exec_sk ( not $ L.null args ) prog exec_sk red skprog = do ( _ , skgr ) <- parse_sk skprog@@ -324,7 +323,7 @@ output_sk_strs :: [ SKstr] -> IO ( ) output_sk_strs sk_strs = do- putStrLn $ concat $ map show sk_strs+ putStrLn $ L.concat $ L.map show sk_strs parse_sk sk = do name <- getProgName