[Haskell-cafe] ghci Crashing...

Gaetano Caruana gcaruana at gmail.com
Mon Apr 16 11:04:41 EDT 2007


Hi all. I am new to this list ;) Today I have encountered something new that
has never happened to me in the past 6 months that I have been using ghci
and Haskell.

I wrote this function:


type Line = (Point,Point)
type Point = (Float,Float)

circleLineIntersection :: Float -> Float -> Float -> Line -> Maybe [Point]
circleLineIntersection h k r ((x1,y1),(x2,y2)) = do
                                                    let
                                                        perpdist =
calcPerpDist (h,k) ((x1,y1),(x2,y2))
                                                        noSolution =
perpdist > r
                                                        oneSolution =
perpdist  == r
                                                        twoSolutions =
perpdist < r
                                                     in
                                                        do
                                                          if noSolution then
                                                              Nothing
                                                           else
                                                              let
                                                                  dx = x2 -
x1
                                                                  dy = y2 -
y1
                                                                  dr = sqrt
(dx * dx + dy * dy)
                                                                  bigD = x1
* y2 - x2 * y1
                                                                  x1 = (
bigD * dy + sign (dy) * dx  * sqrt( r * r * dr * dr - bigD * bigD  ) ) / (dr
* dr)
                                                                  y1 = -
bigD * dx + abs(dy) * sqrt( r * r * dr * dr - bigD * bigD  )  / (dr * dr)
                                                                  x2 = (
bigD * dy - sign (dy) * dx  * sqrt( r * r * dr * dr - bigD * bigD  ) ) / (dr
* dr)
                                                                  y2 = -
bigD * dx - abs(dy) * sqrt( r * r * dr * dr - bigD * bigD  )  / (dr * dr)

in
                                                            if oneSolution
then
                                                              do
                                                                  Just
[(x1,y1)]
                                                            else
                                                              do
                                                                Just
[(x1,y1),(x2,y2)]

Compiling is fine...
When I run the function like this....

circleLineIntersection 1 1 1 ((1,1),(2,2))

it simply outputs....
Just [(

No CPU usage.
I am using fglasgow-exts

Thanks for your help.

Gaetano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070416/5885b5ec/attachment.htm


More information about the Haskell-Cafe mailing list