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)