[Haskell-cafe] Re: Translating perl -> haskell,
string "fill ins" with an error on invalid inputseems awfullycomplex.
Is there a way to simplify?
jeff p
mutjida at gmail.com
Sun Apr 15 23:20:06 EDT 2007
{----
Hello,
Here is a variation on Claus' code which returns an Either type
rather than fails with error. This could be further generalized to use
any instance of MonadError, rather than Either.
-Jeff
----}
import Control.Monad.Error
financial_output :: String -> String -> String -> String -> Either String String
financial_output company displaymode startDate endDate = financial_script
where
financial_script = gnuplot_timeseries_settings <++> "\n"
<++> "plot [\"" <++> startDate <++> "\":\""
<++> endDate <++> "\"]"
<++> " '" <++> companyFile <++> "'" <++> modeString
<++> " title \"" <++> company <++> " " <++>
titleEnd <++> "\""
companyFile = lookupWith ("no company file for " ++ company)
company company_to_companyfile
modeString = lookupWith ("no mode string for " ++ displaymode)
displaymode displaymode_to_modestring
titleEnd = lookupWith ("no title end for " ++ displaymode)
displaymode displaymode_to_titleend
lookupWith :: (Eq a) => String -> a -> [(a,String)] -> Either String String
lookupWith error key assocs = maybe (Left error) Right $ lookup key assocs
class MyString a
where mystr :: a -> Either String String
instance MyString (Either String String)
where mystr = id
instance MyString String
where mystr = Right
x <++> y = do xv <- mystr x
yv <- mystr y
return $ xv ++ yv
More information about the Haskell-Cafe
mailing list