[Haskell-cafe] Newbie question on Haskell type
robdockins at fastmail.fm
Fri Oct 14 09:29:01 EDT 2005
So this is essentially a parsing problem. You want a user to be able
input a string and have it interpreted as an appropriate data value. I
think you may want to look at the Parsec library
(http://www.cs.uu.nl/~daan/parsec.html). I don't think the direction
you are heading will get the results you want.
As to typeable, the basic types are mostly all members of Typeable. You
can find a pretty good list here:
Additionally, GHC can create Typeable instances automaticly for user
defined datatypes; just add a deriving Typeable clause.
data SomeType = C1 | C2 deriving (Show,Eq,Typeable)
The restriction is that all types which appear in constructors must also
be in Typeable.
I believe the DrIFT preprocessor can also create Typeable instances if
you are not using GHC.
Huong Nguyen wrote:
> Thanks for your solution.
> My main purpose is that I want to input a value and check whether this
> value is belong to some specific types or not. These types can be some
> popular types (such as: String, Char, Int, etc) or some more complex
> data structures defined by user. Thus, at first, I try with type String
> (even with that simple type, I still face difficulty ;-))
> I want to ask you which types can be used with Data.Typeable. I read for
> over 15 minutes but it is still not clear with me.
> For some other complex data types defined by user, what I should do to
> use Data.Typeable ?
> Thank you very much.
> On 10/13/05, *robert dockins* <robdockins at fastmail.fm
> <mailto:robdockins at fastmail.fm>> wrote:
> In GHC you can do this:
> > import Data.Typeable
> > isString :: (Typeable a) => a -> Bool
> > isString x = typeOf x == typeOf (undefined::String)
> Why do you want this? It's not the kind of operation one does very
> often in Haskell.
> Huong Nguyen wrote:
> > Hi all,
> > I want to write a small functionto test whether an input is a
> String or
> > not. For example,
> > isString::(Show a) =>a ->Bool
> > This function will return True if the input is a string and
> return False
> > if not
> > Any of you have idea about that? Thanks in advance
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe