> I'm new to haskell, I'm wondering how can you write a function that will do > the following: > > fromIntToString :: Int -> String > > this is a cast function to cast an Int to a String.
I'll assume that by a cast you mean a conversion from one type to another where no information is lost. -- Let's assume that we can represent every Int using a String intToString :: Int -> String intToString n = ... -- Not every member of String can be interpreted as an Int, for -- example "aabc" is nonsense when viewed as an Int. stringToInt :: String -> Maybe Int stringToInt s = ... -- This property should hold for every Int. It states that given some -- Int called n we can convert it to a string and back without losing -- information. prop_intString :: Int -> Bool prop_intString n = maybe False (== n) . stringToInt . intToString $ n Using such a property can be really useful to test your implementation of intToString and stringToInt. > I know such function > exist, however let's assume it didn't exist. How would I write such > function? Cause I have no idea, because there are infinity possibilities if > I do it like: > > fromIntToString x | x == 1 = "1" > | x == 2 = "2" > -- And so on... It might be useful to first write this function first: intToDigits :: Int -> [Int] intToDigits n = ... It should convert an integer to a list of its digits (using normal base 10): intToDigits 123 == [1, 2, 3] Then you can write a function which takes such a list and converts it to a string. (Hint: use 'map' in combination with a function of type 'Int -> Char') You have to take extra care if you also want to support negative numbers. > I've also thinked about defining the defining the data types Int and String > (I know you cannot redefine them, at least I think so), however I've no > succes. You can create your own datatypes which behave roughly the same as Int and String. You will never be able to create something which behaves exactly as a String because it is treated a bit special (it has its own syntax). import Data.String data MyInt = ... data MyString = ... instance Num MyInt where ... instance IsString MyString where ... By creating an instance of Num for your own type MyInt you'll be able to use the familiar operators +, - etc... If you want all the functionality that normal Ints have for your own type you'll also need instances of Bounded, Enum, Eq, Integral, Num, Ord, Read, Real, Show and Ix. I might have forgotten a few :-) Some of those can be automatically derived for you. (data MyInt = ... deriving Show, for example) I hope some of this is useful to you. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe