# [Haskell-beginners] Multiple type numeric data

iæfai iaefai at me.com
Mon Nov 2 00:04:03 EST 2009

```Didier, here is some code that improves your one function, it will
almost compile with ghc.

module Main where

data Figure = Carre Int Int Int
| Rond (Int, Int, Integer)    -- i hope Integer allows
fromInteger function for r

surface_carre :: Figure -> Int
surface_carre (Carre x y c)= c * c

surface_rond :: Figure -> Float
surface_rond  (Rond (x, y, r))= 3.14 * (fromInteger (r * r))

surface x = case x of
Carre a b c     -> surface_carre x
Rond  (a, b, c) -> surface_rond x
a::Figure
a=Carre 10 10 5
b::Figure
b=Rond (20, 20, 3)

main :: IO ()
main = do
putStrLn "Test"
return ()

Note that surface has a problem because surface_carre returns an Int
and surface_rond returns a Float. These types are incompatible. I
don't think there is a more general type you can use. Can you get away
with just using all the same type?

- iæfai

On 2009-11-01, at 12:53 PM, Didier Jacquemart wrote:

> data Figure = Carre Int Int Int
>         | Rond (Int, Int, Integer)    -- i hope Integer allows
> fromInteger function for r
>
> surface_carre :: Figure -> Int
> surface_carre (Carre x y c)= c * c
>
> surface_rond :: Figure -> Float
> surface_rond  (Rond (x, y, r))= 3.14  * r * r
>
> surface x = case x of
>   Carre a b c     -> surface_carre x
>   Rond  (a, b, c) -> surface_rond x
> a::Figure
> a=Carre 10 10 5
> b::Figure
> b=Rond (20, 20, 3)

```