You are correct. You can't say: let x = if ??? then () else (5::Integer)
because then the compiler can't assign a type to x. However, to achieve what you want, you might try something like this (untested code follows): > main = do > l <- getLine > let x = case maybeRead l of > Just () -> Left () > _ -> case maybeRead l of > Just (i::Integer) -> Right i > if isLeft x > then putStrLn "Unit type detected" > else putStrLn "Integer type detected" where > maybeRead :: Read a => String -> Maybe a > maybeRead x = case readsPrec x of > [(a,_)] -> Just a > _ -> Nothing or something like that. Another way to do it would be to define a "universal" type: > data Univ = UUnit () | UInteger Integer | UDouble Double | ... and define an instance of read on it that loos like the cascaded cases from above... HTH, Hal -- Hal Daume III "Computer science is no more about computers | [EMAIL PROTECTED] than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Tue, 7 Jan 2003, Richard Uhtenwoldt wrote: > Just want to make sure I understand. > > There does not exist a Haskell implementation-specific extension which > provides the sort of dynamic type that would allow one to discriminate > at run time between built-in types; right? eg, > > main=do > object<-readLn > case object of --or some such syntax > ()->putStrLn "void type detected" > (a::Integer)->putStrLn "Integer type detected" > > For those readers whose prelude is rusty, I quote from the prelude: > > readLn :: Read a => IO a > readLn = do l <- getLine > r <- readIO l > return r > > > And even if the object being discriminated "lacks > polymorphicity", eg, this next, that does not change the answer > to my question; right? > > main=do > command<-readLn > let > object=case command of > "Integer"->(5::Integer) > "Void"->() > case object of > ()->putStrLn "void type detected" > (a::Integer)->putStrLn "Integer type detected" > _______________________________________________ > Haskell mailing list > [EMAIL PROTECTED] > http://www.haskell.org/mailman/listinfo/haskell > _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
