doesLineHitStrk :: ((Double,Double),(Double,Double)) -> Stroke -> Bool
doesLineHitStrk line1 str@(Stroke _t _c _w _d) = test (stroke_data str) 
  where test [] = False
        test ((_:!:_):[]) = False
        test ((x0:!:y0):(x:!:y):rest) 
          = do2LinesIntersect line1 ((x0,y0),(x,y))
            || test ((x:!:y) : rest)
doesLineHitStrk :: ((Double,Double),(Double,Double)) -> Stroke -> Bool
doesLineHitStrk line1 str@(Stroke _t _c _w _d) = test (stroke_data str) 
  where test [] = False
        test ((_:!:_):[]) = False
        test ((x0:!:y0):(x:!:y):rest) 
          = do2LinesIntersect line1 ((x0,y0),(x,y))
            || test ((x:!:y) : rest)
doesLineHitStrk line1 str@(Stroke _t _c _w _d) = test (stroke_data str) 
  where test [] = False
        test ((_:!:_):[]) = False
        test ((x0:!:y0):(x:!:y):rest) 
          = do2LinesIntersect line1 ((x0,y0),(x,y))
            || test ((x:!:y) : rest)