-- -- Copyright (c) 2006 Don Stewart - http://www.cse.unsw.edu.au/~dons -- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html) -- -- Syntactic sugar for developing plugins. -- Simplifies import lists, and abstracts over common patterns -- module Plugin ( ios, list, ios80, module Lambdabot, module LBState, module Config, module Lib.Util, module Lib.Serial, module Lib.Process, module Lib.MiniHTTP, module Lib.Url, module Data.List, module Data.Char, module Data.Maybe, module Data.Either, module Text.Regex, module System.IO, module Control.Monad.Error ) where import Lambdabot import LBState import Config import Lib.Util import Lib.Serial import Lib.Process import Lib.MiniHTTP import Lib.Url import Data.List import Data.Char import Data.Maybe import Data.Either import Text.Regex import System.IO import Control.Monad.Error import Control.Monad.Trans -- | convenience, we often want to perform some io, get a string, and box it. ios :: (Functor m, MonadIO m) => IO a -> m [a] ios = list . io list :: (Functor m, Monad m) => m a -> m [a] list = (return `fmap`) -- | convenience, similar to ios but also cut output to channel to 80 characters -- usage: @process _ _ to _ s = ios80 to (plugs s)@ ios80 :: (Functor m, MonadIO m) => String -> IO String -> m [String] ios80 to what = list . io $ what >>= return . lim where lim = case to of ('#':_) -> abbr 80 -- message to channel: be nice _ -> id -- private message: get everything abbr n s = let (b, t) = splitAt n s in if null t then b else take (n-3) b ++ "..."