mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-14 09:32:22 +00:00
287 lines
25 KiB
HTML
287 lines
25 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<style type="text/css">
|
|
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
|
|
span.nottickedoff { background: yellow}
|
|
span.istickedoff { background: white }
|
|
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
|
|
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
|
|
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
|
|
span.decl { font-weight: bold }
|
|
span.spaces { background: white }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre>
|
|
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
|
|
</pre>
|
|
<pre>
|
|
<span class="lineno"> 1 </span>{-# LANGUAGE FunctionalDependencies #-}
|
|
<span class="lineno"> 2 </span>{-# LANGUAGE MultiParamTypeClasses #-}
|
|
<span class="lineno"> 3 </span>{-# LANGUAGE UndecidableInstances #-}
|
|
<span class="lineno"> 4 </span>module Reanimate.Internal.CubicBezier
|
|
<span class="lineno"> 5 </span> ( AnyBezier(..)
|
|
<span class="lineno"> 6 </span> , CubicBezier(..)
|
|
<span class="lineno"> 7 </span> , QuadBezier(..)
|
|
<span class="lineno"> 8 </span> , OpenPath(..)
|
|
<span class="lineno"> 9 </span> , ClosedPath(..)
|
|
<span class="lineno"> 10 </span> , PathJoin(..)
|
|
<span class="lineno"> 11 </span> , ClosedMetaPath(..)
|
|
<span class="lineno"> 12 </span> , OpenMetaPath(..)
|
|
<span class="lineno"> 13 </span> , MetaJoin(..)
|
|
<span class="lineno"> 14 </span> , MetaNodeType(..)
|
|
<span class="lineno"> 15 </span> , C.GenericBezier(..)
|
|
<span class="lineno"> 16 </span> , C.FillRule(..)
|
|
<span class="lineno"> 17 </span> , C.Tension(..)
|
|
<span class="lineno"> 18 </span> , quadToCubic
|
|
<span class="lineno"> 19 </span> , arcLength
|
|
<span class="lineno"> 20 </span> , arcLengthParam
|
|
<span class="lineno"> 21 </span> , C.splitBezier
|
|
<span class="lineno"> 22 </span> , colinear
|
|
<span class="lineno"> 23 </span> , evalBezier
|
|
<span class="lineno"> 24 </span> , evalBezierDeriv
|
|
<span class="lineno"> 25 </span> , bezierHoriz
|
|
<span class="lineno"> 26 </span> , bezierVert
|
|
<span class="lineno"> 27 </span> , C.bezierSubsegment
|
|
<span class="lineno"> 28 </span> , C.reorient
|
|
<span class="lineno"> 29 </span> , closedPathCurves
|
|
<span class="lineno"> 30 </span> , openPathCurves
|
|
<span class="lineno"> 31 </span> , curvesToClosed
|
|
<span class="lineno"> 32 </span> , closest
|
|
<span class="lineno"> 33 </span> , unmetaOpen
|
|
<span class="lineno"> 34 </span> , unmetaClosed
|
|
<span class="lineno"> 35 </span> , union
|
|
<span class="lineno"> 36 </span> , bezierIntersection
|
|
<span class="lineno"> 37 </span> , interpolateVector
|
|
<span class="lineno"> 38 </span> , vectorDistance
|
|
<span class="lineno"> 39 </span> , findBezierInflection
|
|
<span class="lineno"> 40 </span> , findBezierCusp
|
|
<span class="lineno"> 41 </span> ) where
|
|
<span class="lineno"> 42 </span>
|
|
<span class="lineno"> 43 </span>import qualified Data.Vector.Unboxed as V
|
|
<span class="lineno"> 44 </span>import qualified Geom2D.CubicBezier as C
|
|
<span class="lineno"> 45 </span>import Linear.V2
|
|
<span class="lineno"> 46 </span>
|
|
<span class="lineno"> 47 </span>------------------------------------------------------------
|
|
<span class="lineno"> 48 </span>-- Data types
|
|
<span class="lineno"> 49 </span>
|
|
<span class="lineno"> 50 </span>newtype AnyBezier a = AnyBezier (V.Vector (V2 a))
|
|
<span class="lineno"> 51 </span>
|
|
<span class="lineno"> 52 </span>data CubicBezier a = CubicBezier
|
|
<span class="lineno"> 53 </span> { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">cubicC0</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 54 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">cubicC1</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 55 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">cubicC2</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 56 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">cubicC3</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 57 </span> } deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 58 </span>
|
|
<span class="lineno"> 59 </span>data QuadBezier a = QuadBezier
|
|
<span class="lineno"> 60 </span> { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">quadC0</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 61 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">quadC1</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 62 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">quadC2</span></span></span> :: !(V2 a)
|
|
<span class="lineno"> 63 </span> } deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 64 </span>
|
|
<span class="lineno"> 65 </span>data OpenPath a = OpenPath [(V2 a, PathJoin a)] (V2 a)
|
|
<span class="lineno"> 66 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 67 </span>data ClosedPath a = ClosedPath [(V2 a, PathJoin a)]
|
|
<span class="lineno"> 68 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 69 </span>
|
|
<span class="lineno"> 70 </span>data PathJoin a
|
|
<span class="lineno"> 71 </span> = JoinLine
|
|
<span class="lineno"> 72 </span> | JoinCurve (V2 a) (V2 a)
|
|
<span class="lineno"> 73 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 74 </span>
|
|
<span class="lineno"> 75 </span>data ClosedMetaPath a = ClosedMetaPath [(V2 a, MetaJoin a)]
|
|
<span class="lineno"> 76 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 77 </span>data OpenMetaPath a = OpenMetaPath [(V2 a, MetaJoin a)] (V2 a)
|
|
<span class="lineno"> 78 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 79 </span>
|
|
<span class="lineno"> 80 </span>data MetaJoin a
|
|
<span class="lineno"> 81 </span> = MetaJoin
|
|
<span class="lineno"> 82 </span> { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">metaTypeL</span></span></span> :: MetaNodeType a
|
|
<span class="lineno"> 83 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">tensionL</span></span></span> :: C.Tension a
|
|
<span class="lineno"> 84 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">tensionR</span></span></span> :: C.Tension a
|
|
<span class="lineno"> 85 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">metaTypeR</span></span></span> :: MetaNodeType a
|
|
<span class="lineno"> 86 </span> }
|
|
<span class="lineno"> 87 </span> | Controls (V2 a) (V2 a)
|
|
<span class="lineno"> 88 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 89 </span>
|
|
<span class="lineno"> 90 </span>data MetaNodeType a
|
|
<span class="lineno"> 91 </span> = Open
|
|
<span class="lineno"> 92 </span> | Curl { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">curlgamma</span></span></span> :: a }
|
|
<span class="lineno"> 93 </span> | Direction { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">nodedir</span></span></span> :: V2 a }
|
|
<span class="lineno"> 94 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>)
|
|
<span class="lineno"> 95 </span>
|
|
<span class="lineno"> 96 </span>------------------------------------------------------------
|
|
<span class="lineno"> 97 </span>-- Methods
|
|
<span class="lineno"> 98 </span>
|
|
<span class="lineno"> 99 </span>quadToCubic :: Fractional a => QuadBezier a -> CubicBezier a
|
|
<span class="lineno"> 100 </span><span class="decl"><span class="nottickedoff">quadToCubic = upCast . C.quadToCubic . downCast</span></span>
|
|
<span class="lineno"> 101 </span>
|
|
<span class="lineno"> 102 </span>arcLength :: CubicBezier Double -> Double -> Double -> Double
|
|
<span class="lineno"> 103 </span><span class="decl"><span class="istickedoff">arcLength bezier t tol = C.arcLength (downCast bezier) t tol</span></span>
|
|
<span class="lineno"> 104 </span>
|
|
<span class="lineno"> 105 </span>arcLengthParam :: CubicBezier Double -> Double -> Double -> Double
|
|
<span class="lineno"> 106 </span><span class="decl"><span class="nottickedoff">arcLengthParam bezier t tol = C.arcLengthParam (downCast bezier) t tol</span></span>
|
|
<span class="lineno"> 107 </span>
|
|
<span class="lineno"> 108 </span>colinear :: CubicBezier Double -> Double -> Bool
|
|
<span class="lineno"> 109 </span><span class="decl"><span class="nottickedoff">colinear bezier tol = C.colinear (downCast bezier) tol</span></span>
|
|
<span class="lineno"> 110 </span>
|
|
<span class="lineno"> 111 </span>evalBezier :: (C.GenericBezier b, V.Unbox a, Fractional a) => b a -> a -> V2 a
|
|
<span class="lineno"> 112 </span><span class="decl"><span class="nottickedoff">evalBezier c p = upCast $ C.evalBezier c p</span></span>
|
|
<span class="lineno"> 113 </span>
|
|
<span class="lineno"> 114 </span>evalBezierDeriv :: (V.Unbox a, Fractional a,C.GenericBezier b) => b a -> a -> (V2 a, V2 a)
|
|
<span class="lineno"> 115 </span><span class="decl"><span class="nottickedoff">evalBezierDeriv c p = upCast $ C.evalBezierDeriv c p</span></span>
|
|
<span class="lineno"> 116 </span>
|
|
<span class="lineno"> 117 </span>bezierHoriz :: CubicBezier Double -> [Double]
|
|
<span class="lineno"> 118 </span><span class="decl"><span class="nottickedoff">bezierHoriz = C.bezierHoriz . downCast</span></span>
|
|
<span class="lineno"> 119 </span>
|
|
<span class="lineno"> 120 </span>bezierVert :: CubicBezier Double -> [Double]
|
|
<span class="lineno"> 121 </span><span class="decl"><span class="nottickedoff">bezierVert = C.bezierVert . downCast</span></span>
|
|
<span class="lineno"> 122 </span>
|
|
<span class="lineno"> 123 </span>unmetaOpen :: OpenMetaPath Double -> OpenPath Double
|
|
<span class="lineno"> 124 </span><span class="decl"><span class="nottickedoff">unmetaOpen = upCast . C.unmetaOpen . downCast</span></span>
|
|
<span class="lineno"> 125 </span>
|
|
<span class="lineno"> 126 </span>unmetaClosed :: ClosedMetaPath Double -> ClosedPath Double
|
|
<span class="lineno"> 127 </span><span class="decl"><span class="nottickedoff">unmetaClosed = upCast . C.unmetaClosed . downCast</span></span>
|
|
<span class="lineno"> 128 </span>
|
|
<span class="lineno"> 129 </span>union :: [ClosedPath Double] -> C.FillRule -> Double -> [ClosedPath Double]
|
|
<span class="lineno"> 130 </span><span class="decl"><span class="nottickedoff">union p fill tol = upCast (C.union (downCast p) fill tol)</span></span>
|
|
<span class="lineno"> 131 </span>
|
|
<span class="lineno"> 132 </span>bezierIntersection :: CubicBezier Double -> CubicBezier Double -> Double -> [(Double, Double)]
|
|
<span class="lineno"> 133 </span><span class="decl"><span class="nottickedoff">bezierIntersection a b t = C.bezierIntersection (downCast a) (downCast b) t</span></span>
|
|
<span class="lineno"> 134 </span>
|
|
<span class="lineno"> 135 </span>closest :: CubicBezier Double -> V2 Double -> Double -> Double
|
|
<span class="lineno"> 136 </span><span class="decl"><span class="nottickedoff">closest c p t = C.closest (downCast c) (downCast p) t</span></span>
|
|
<span class="lineno"> 137 </span>
|
|
<span class="lineno"> 138 </span>closedPathCurves :: Fractional a => ClosedPath a -> [CubicBezier a]
|
|
<span class="lineno"> 139 </span><span class="decl"><span class="nottickedoff">closedPathCurves = upCast . C.closedPathCurves . downCast</span></span>
|
|
<span class="lineno"> 140 </span>
|
|
<span class="lineno"> 141 </span>openPathCurves :: Fractional a => OpenPath a -> [CubicBezier a]
|
|
<span class="lineno"> 142 </span><span class="decl"><span class="nottickedoff">openPathCurves = upCast . C.openPathCurves . downCast</span></span>
|
|
<span class="lineno"> 143 </span>
|
|
<span class="lineno"> 144 </span>curvesToClosed :: [CubicBezier a] -> ClosedPath a
|
|
<span class="lineno"> 145 </span><span class="decl"><span class="nottickedoff">curvesToClosed = upCast . C.curvesToClosed . downCast</span></span>
|
|
<span class="lineno"> 146 </span>
|
|
<span class="lineno"> 147 </span>interpolateVector :: Num a => V2 a -> V2 a -> a -> V2 a
|
|
<span class="lineno"> 148 </span><span class="decl"><span class="nottickedoff">interpolateVector a b p = upCast $ C.interpolateVector (downCast a) (downCast b) p</span></span>
|
|
<span class="lineno"> 149 </span>
|
|
<span class="lineno"> 150 </span>vectorDistance :: Floating a => V2 a -> V2 a -> a
|
|
<span class="lineno"> 151 </span><span class="decl"><span class="nottickedoff">vectorDistance a b = C.vectorDistance (downCast a) (downCast b)</span></span>
|
|
<span class="lineno"> 152 </span>
|
|
<span class="lineno"> 153 </span>findBezierInflection :: CubicBezier Double -> [Double]
|
|
<span class="lineno"> 154 </span><span class="decl"><span class="nottickedoff">findBezierInflection = C.findBezierInflection . downCast</span></span>
|
|
<span class="lineno"> 155 </span>
|
|
<span class="lineno"> 156 </span>findBezierCusp :: CubicBezier Double -> [Double]
|
|
<span class="lineno"> 157 </span><span class="decl"><span class="nottickedoff">findBezierCusp = C.findBezierCusp . downCast</span></span>
|
|
<span class="lineno"> 158 </span>
|
|
<span class="lineno"> 159 </span>------------------------------------------------------------
|
|
<span class="lineno"> 160 </span>-- Instances
|
|
<span class="lineno"> 161 </span>
|
|
<span class="lineno"> 162 </span>instance C.GenericBezier QuadBezier where
|
|
<span class="lineno"> 163 </span> <span class="decl"><span class="nottickedoff">degree = C.degree . downCast</span></span>
|
|
<span class="lineno"> 164 </span> <span class="decl"><span class="nottickedoff">toVector = C.toVector . downCast</span></span>
|
|
<span class="lineno"> 165 </span> <span class="decl"><span class="nottickedoff">unsafeFromVector = upCast . C.unsafeFromVector</span></span>
|
|
<span class="lineno"> 166 </span>
|
|
<span class="lineno"> 167 </span>instance C.GenericBezier CubicBezier where
|
|
<span class="lineno"> 168 </span> <span class="decl"><span class="nottickedoff">degree = C.degree . downCast</span></span>
|
|
<span class="lineno"> 169 </span> <span class="decl"><span class="nottickedoff">toVector = C.toVector . downCast</span></span>
|
|
<span class="lineno"> 170 </span> <span class="decl"><span class="nottickedoff">unsafeFromVector = upCast . C.unsafeFromVector</span></span>
|
|
<span class="lineno"> 171 </span>
|
|
<span class="lineno"> 172 </span>instance C.GenericBezier AnyBezier where
|
|
<span class="lineno"> 173 </span> <span class="decl"><span class="nottickedoff">degree = C.degree . downCast</span></span>
|
|
<span class="lineno"> 174 </span> <span class="decl"><span class="istickedoff">toVector = C.toVector . downCast</span></span>
|
|
<span class="lineno"> 175 </span> <span class="decl"><span class="istickedoff">unsafeFromVector = upCast . C.unsafeFromVector</span></span>
|
|
<span class="lineno"> 176 </span>
|
|
<span class="lineno"> 177 </span>------------------------------------------------------------
|
|
<span class="lineno"> 178 </span>-- Casting
|
|
<span class="lineno"> 179 </span>
|
|
<span class="lineno"> 180 </span>class Cast a b | a -> b, b -> a where
|
|
<span class="lineno"> 181 </span> downCast :: a -> b
|
|
<span class="lineno"> 182 </span> upCast :: b -> a
|
|
<span class="lineno"> 183 </span>
|
|
<span class="lineno"> 184 </span>instance Cast a b => Cast [a] [b] where
|
|
<span class="lineno"> 185 </span> <span class="decl"><span class="nottickedoff">downCast = map downCast</span></span>
|
|
<span class="lineno"> 186 </span> <span class="decl"><span class="nottickedoff">upCast = map upCast</span></span>
|
|
<span class="lineno"> 187 </span>
|
|
<span class="lineno"> 188 </span>instance (Cast a a', Cast b b') => Cast (a,b) (a',b') where
|
|
<span class="lineno"> 189 </span> <span class="decl"><span class="nottickedoff">downCast (a, b) = (downCast a, downCast b)</span></span>
|
|
<span class="lineno"> 190 </span> <span class="decl"><span class="nottickedoff">upCast (a, b) = (upCast a, upCast b)</span></span>
|
|
<span class="lineno"> 191 </span>
|
|
<span class="lineno"> 192 </span>instance Cast (V2 a) (C.Point a) where
|
|
<span class="lineno"> 193 </span> <span class="decl"><span class="istickedoff">downCast (V2 a b) = C.Point a b</span></span>
|
|
<span class="lineno"> 194 </span> <span class="decl"><span class="nottickedoff">upCast (C.Point a b) = V2 a b</span></span>
|
|
<span class="lineno"> 195 </span>
|
|
<span class="lineno"> 196 </span>instance Cast (CubicBezier a) (C.CubicBezier a) where
|
|
<span class="lineno"> 197 </span> <span class="decl"><span class="istickedoff">downCast (CubicBezier a b c d) = C.CubicBezier</span>
|
|
<span class="lineno"> 198 </span><span class="spaces"> </span><span class="istickedoff">(downCast a) (downCast b) (downCast c) (downCast d)</span></span>
|
|
<span class="lineno"> 199 </span> <span class="decl"><span class="nottickedoff">upCast (C.CubicBezier a b c d) = CubicBezier</span>
|
|
<span class="lineno"> 200 </span><span class="spaces"> </span><span class="nottickedoff">(upCast a) (upCast b) (upCast c) (upCast d)</span></span>
|
|
<span class="lineno"> 201 </span>
|
|
<span class="lineno"> 202 </span>instance Cast (QuadBezier a) (C.QuadBezier a) where
|
|
<span class="lineno"> 203 </span> <span class="decl"><span class="nottickedoff">downCast (QuadBezier a b c) = C.QuadBezier</span>
|
|
<span class="lineno"> 204 </span><span class="spaces"> </span><span class="nottickedoff">(downCast a) (downCast b) (downCast c)</span></span>
|
|
<span class="lineno"> 205 </span> <span class="decl"><span class="nottickedoff">upCast (C.QuadBezier a b c)= QuadBezier</span>
|
|
<span class="lineno"> 206 </span><span class="spaces"> </span><span class="nottickedoff">(upCast a) (upCast b) (upCast c)</span></span>
|
|
<span class="lineno"> 207 </span>
|
|
<span class="lineno"> 208 </span>instance V.Unbox a => Cast (AnyBezier a) (C.AnyBezier a) where
|
|
<span class="lineno"> 209 </span> <span class="decl"><span class="istickedoff">downCast (AnyBezier arr) = C.AnyBezier $</span>
|
|
<span class="lineno"> 210 </span><span class="spaces"> </span><span class="istickedoff">V.map (\(V2 a b) -> (a,b)) arr</span></span>
|
|
<span class="lineno"> 211 </span> <span class="decl"><span class="istickedoff">upCast (C.AnyBezier arr) = AnyBezier $</span>
|
|
<span class="lineno"> 212 </span><span class="spaces"> </span><span class="istickedoff">V.map (\(a, b) -> V2 a b) arr</span></span>
|
|
<span class="lineno"> 213 </span>
|
|
<span class="lineno"> 214 </span>instance Cast (MetaNodeType a) (C.MetaNodeType a) where
|
|
<span class="lineno"> 215 </span> <span class="decl"><span class="nottickedoff">downCast Open = C.Open</span>
|
|
<span class="lineno"> 216 </span><span class="spaces"> </span><span class="nottickedoff">downCast (Curl gamma) = C.Curl gamma</span>
|
|
<span class="lineno"> 217 </span><span class="spaces"> </span><span class="nottickedoff">downCast (Direction dir) = C.Direction (downCast dir)</span></span>
|
|
<span class="lineno"> 218 </span> <span class="decl"><span class="nottickedoff">upCast C.Open = Open</span>
|
|
<span class="lineno"> 219 </span><span class="spaces"> </span><span class="nottickedoff">upCast (C.Curl gamma) = Curl gamma</span>
|
|
<span class="lineno"> 220 </span><span class="spaces"> </span><span class="nottickedoff">upCast (C.Direction dir) = Direction (upCast dir)</span></span>
|
|
<span class="lineno"> 221 </span>
|
|
<span class="lineno"> 222 </span>instance Cast (MetaJoin a) (C.MetaJoin a) where
|
|
<span class="lineno"> 223 </span> <span class="decl"><span class="nottickedoff">downCast (MetaJoin tyL tL tR tyR) = C.MetaJoin (downCast tyL) tL tR (downCast tyR)</span>
|
|
<span class="lineno"> 224 </span><span class="spaces"> </span><span class="nottickedoff">downCast (Controls p1 p2) = C.Controls (downCast p1) (downCast p2)</span></span>
|
|
<span class="lineno"> 225 </span> <span class="decl"><span class="nottickedoff">upCast (C.MetaJoin tyL tL tR tyR) = MetaJoin (upCast tyL) tL tR (upCast tyR)</span>
|
|
<span class="lineno"> 226 </span><span class="spaces"> </span><span class="nottickedoff">upCast (C.Controls p1 p2) = Controls (upCast p1) (upCast p2)</span></span>
|
|
<span class="lineno"> 227 </span>
|
|
<span class="lineno"> 228 </span>instance Cast (PathJoin a) (C.PathJoin a) where
|
|
<span class="lineno"> 229 </span> <span class="decl"><span class="nottickedoff">downCast JoinLine = C.JoinLine</span>
|
|
<span class="lineno"> 230 </span><span class="spaces"> </span><span class="nottickedoff">downCast (JoinCurve a b) = C.JoinCurve (downCast a) (downCast b)</span></span>
|
|
<span class="lineno"> 231 </span> <span class="decl"><span class="nottickedoff">upCast C.JoinLine = JoinLine</span>
|
|
<span class="lineno"> 232 </span><span class="spaces"> </span><span class="nottickedoff">upCast (C.JoinCurve a b) = JoinCurve (upCast a) (upCast b)</span></span>
|
|
<span class="lineno"> 233 </span>
|
|
<span class="lineno"> 234 </span>instance Cast (OpenMetaPath a) (C.OpenMetaPath a) where
|
|
<span class="lineno"> 235 </span> <span class="decl"><span class="nottickedoff">downCast (OpenMetaPath lst end) = C.OpenMetaPath</span>
|
|
<span class="lineno"> 236 </span><span class="spaces"> </span><span class="nottickedoff">[ (downCast p, downCast j)</span>
|
|
<span class="lineno"> 237 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ] (downCast end)</span></span>
|
|
<span class="lineno"> 238 </span> <span class="decl"><span class="nottickedoff">upCast (C.OpenMetaPath lst end) = OpenMetaPath</span>
|
|
<span class="lineno"> 239 </span><span class="spaces"> </span><span class="nottickedoff">[ (upCast p, upCast j)</span>
|
|
<span class="lineno"> 240 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ] (upCast end)</span></span>
|
|
<span class="lineno"> 241 </span>
|
|
<span class="lineno"> 242 </span>instance Cast (ClosedMetaPath a) (C.ClosedMetaPath a) where
|
|
<span class="lineno"> 243 </span> <span class="decl"><span class="nottickedoff">downCast (ClosedMetaPath lst) = C.ClosedMetaPath</span>
|
|
<span class="lineno"> 244 </span><span class="spaces"> </span><span class="nottickedoff">[ (downCast p, downCast j)</span>
|
|
<span class="lineno"> 245 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ]</span></span>
|
|
<span class="lineno"> 246 </span> <span class="decl"><span class="nottickedoff">upCast (C.ClosedMetaPath lst) = ClosedMetaPath</span>
|
|
<span class="lineno"> 247 </span><span class="spaces"> </span><span class="nottickedoff">[ (upCast p, upCast j)</span>
|
|
<span class="lineno"> 248 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ]</span></span>
|
|
<span class="lineno"> 249 </span>
|
|
<span class="lineno"> 250 </span>instance Cast (OpenPath a) (C.OpenPath a) where
|
|
<span class="lineno"> 251 </span> <span class="decl"><span class="nottickedoff">downCast (OpenPath lst end) = C.OpenPath</span>
|
|
<span class="lineno"> 252 </span><span class="spaces"> </span><span class="nottickedoff">[ (downCast p, downCast j)</span>
|
|
<span class="lineno"> 253 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ] (downCast end)</span></span>
|
|
<span class="lineno"> 254 </span> <span class="decl"><span class="nottickedoff">upCast (C.OpenPath lst end) = OpenPath</span>
|
|
<span class="lineno"> 255 </span><span class="spaces"> </span><span class="nottickedoff">[ (upCast p, upCast j)</span>
|
|
<span class="lineno"> 256 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ] (upCast end)</span></span>
|
|
<span class="lineno"> 257 </span>
|
|
<span class="lineno"> 258 </span>instance Cast (ClosedPath a) (C.ClosedPath a) where
|
|
<span class="lineno"> 259 </span> <span class="decl"><span class="nottickedoff">downCast (ClosedPath lst) = C.ClosedPath</span>
|
|
<span class="lineno"> 260 </span><span class="spaces"> </span><span class="nottickedoff">[ (downCast p, downCast j)</span>
|
|
<span class="lineno"> 261 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ]</span></span>
|
|
<span class="lineno"> 262 </span> <span class="decl"><span class="nottickedoff">upCast (C.ClosedPath lst) = ClosedPath</span>
|
|
<span class="lineno"> 263 </span><span class="spaces"> </span><span class="nottickedoff">[ (upCast p, upCast j)</span>
|
|
<span class="lineno"> 264 </span><span class="spaces"> </span><span class="nottickedoff">| (p, j) <- lst ]</span></span>
|
|
|
|
</pre>
|
|
</body>
|
|
</html>
|