[Haskell-cafe] Re: Translating perl -> haskell,
string "fill ins" with an error on invalid inputseems awfullycomplex.
Is there a way to simplify?
Thomas Hartman
tphyahoo at gmail.com
Wed Apr 18 08:36:31 EDT 2007
Without the flag:
thartman at linodehaskell:~/websites/gnuplotwebinterface/cgi-bin/gnuplot-scripts>./financial2.hs
cisco candles 31-May-04 11-Jun-04
./financial2.hs:58:0:
Illegal instance declaration for `MyString (Either String String)'
(The instance type must be of form (T a b c)
where T is not a synonym, and a,b,c are distinct type variables)
In the instance declaration for `MyString (Either String String)'
./financial2.hs:61:0:
Illegal instance declaration for `MyString String'
(The instance type must be of form (T a b c)
where T is not a synonym, and a,b,c are distinct type variables)
In the instance declaration for `MyString String'
thartman at linodehaskell:~/websites/gnuplotwebinterface/cgi-bin/gnuplot-scripts>cat
--number financial2.hs | tail
58 instance MyString (Either String String)
59 where mystr = id
60
61 instance MyString String
62 where mystr = Right
63
64 x <++> y = do xv <- mystr x
65 yv <- mystr y
66 return $ xv ++ yv
67
2007/4/18, Thomas Hartman <tphyahoo at gmail.com>:
> Looks like this needs to be run with
>
> #!/usr/lib/ghc-6.6/bin/runghc
> {-# OPTIONS_GHC -fglasgow-exts #-}
>
> to get
>
> instance MyString (Either String String)
> where mystr = id
>
> instance MyString String
> where mystr = Right
>
> to work.
>
> I'm curious if there is a community feeling on whether glasgow-exts is
> sort of a de-facto standard now? Or is it common to try to get things
> to work without this, for maximum portability?
>
> Is there an easy way to get the above to work without the compiler flag?
>
>
> 2007/4/16, jeff p <mutjida at gmail.com>:
> > {----
> >
> > 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