Mercurial > repo
view hiJM @ 1337:b6a87dde66ff
<GreyKnight> fetch http://sprunge.us/hiJM
author | HackBot |
---|---|
date | Thu, 10 Jan 2013 12:58:53 +0000 |
parents | |
children |
line wrap: on
line source
import Data.List import Data.Char standardURL = "http://esolangs.org/wiki/Main_Page" standardMessage = "Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: @. (For the other kind of esoterica, try #esoteric on irc.dal.net.)" replace :: (Eq a) => [a] -> [a] -> [a] -> [a] replace _ _ [] = [] replace old new (y:ys) = case stripPrefix old (y:ys) of Nothing -> y : replace old new ys Just ys' -> new ++ replace old new ys' applyGenTemplate :: String -> String -> String -> String -- nick url template -> result applyGenTemplate nick url template = nick ++ ": " ++ replace "^" nick (replace "@" url template) applyTemplate :: String -> String -> String -- nick template -> result applyTemplate nick template = applyGenTemplate nick standardURL template reversibles = "<([{}])>" -- there is probably a better way to do this with guards or somesuch reverseChar :: Char -> Maybe Int -> Char reverseChar c Nothing = c reverseChar c (Just a) = reversibles !! (length reversibles - 1 - a) tidyReverse :: String -> String tidyReverse [] = [] tidyReverse (c:cs) = (tidyReverse cs) ++ [reverseChar c (elemIndex c reversibles)] makeWelcome :: (String -> String) -> String -> String -- filter nick -> result makeWelcome f nick = applyTemplate nick (f standardMessage) welcome = makeWelcome id emoclew = makeWelcome tidyReverse wELCOME = makeWelcome (map toUpper) eMOCLEW = makeWelcome ((map toUpper) . tidyReverse)