Edward Ing inge at ihitacow.com
Tue Oct 3 13:44:27 EDT 2006

```Hi,

School of Expression". Unfortunately there is no teacher that comes
along with the book. I am having a problem with loading an excerise.

I get this message from ghci on a :l Shapes.hs

Shapes.hs:40:40:
Couldn't match `Side' against `Int'
Expected type: Side
Inferred type: Int
In the first argument of `sin', namely `angle'
In the second argument of `(*)', namely `(sin angle)'

The source is below. Side is types as Float. My assumption was that
Haskell would know how to convert the Int to a float and all would be
well. I am I mistaken somewhere? The problem is with the last line.

Tips would be appreciated.

Source Shapes.hs:

module Shapes where

data Shape	= Rectangle Side Side
| RtTriangle Side Side
| Polygon [Vertex]
deriving Show

type Side	= Float
type Vertex	= (Float, Float)
type Angle	= Float

rectangle :: Shape -> Shape
rectangle (Rectangle width height )= Polygon [(0, 0),(0, height),
(width, height), (width, 0)]

rtTriangle :: Shape -> Shape
rtTriangle (RtTriangle width height) = Polygon [(0,0),(0,height),
(width, height)]

regularPolygon :: Int -> Side -> Shape

regularPolygon totalSides sideLength =
let initial = (0.0,0.0) in
Polygon (initial : vertices  initial 1 totalSides sideLength )

vertices :: Vertex -> Int -> Int -> Side -> [Vertex]
vertices _ 0 _ _  = []
vertices lastVertex currentSide totalSides length =
let currentVertex = vertex lastVertex currentSide totalSides length in
currentVertex: vertices currentVertex (totalSides - (currentSide +
1)) totalSides length

vertex :: Vertex -> Int -> Int -> Side -> Vertex
vertex (a ,b) currentSide totalSides length  =
let  angle  = 1.0 * (360 / totalSides) *  currentSide  in
( a  + ( length * (sin  angle)), b + ( (*) (cos angle) length ) )

```