packages feed

oscpacking 0.1.0.0 → 0.2.1.1

raw patch · 14 files changed

+348/−328 lines, 14 filesdep ~base

Dependency ranges changed: base

Files

− Boundary.hs
@@ -1,42 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Boundary where--import Geometry--type Boundary = Point -> Maybe Float--circleB :: Point -> Float -> Boundary-circleB originP r testP =-  if d > r then Nothing else Just (r - d) where d = euclidean originP testP--rectB :: Point -> Float -> Float -> Boundary-rectB (bLX, bLY) width height (tPX, tPY) =-  if or [tPX < bLX,-         tPX > bLX + width,-         tPY < bLY,-         tPY > bLY + height]-  then Nothing-  else Just $ foldr min (1/0)-       [tPX - bLX,-        bLX + width - tPX,-        tPY - bLY,-        bLY + height - tPY]--  
− Examples.hs
@@ -1,63 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Examples where--import Packing-import Paint-import Interpret-import Graphics.Gloss.Interface.Pure.Display-import Boundary-import Geometry--displayExample1 :: IO()-displayExample1 = displayWindow (800, 600) black $-  buildPicture (cycling 0.05 200)-  defaultPacking { boxWidth = 800.0,-                   boxHeight = 600.0,-                   seedX = 42,-                   seedY = 11,-                   boundary = Just (rectB (20, 20) 760 560),-                   startingCircles = [Geometry.Circle-                                        { position = (400, 300), radius = 10 }]-                 }-  1000--displayExample2 :: IO()-displayExample2 = displayWindow (600, 600) black $-  buildPicture (colorful 270)-  defaultPacking { boxWidth = 600.0,-                   boxHeight = 600.0,-                   seedX = 331,-                   seedY = 2010,-                   boundary = Just (circleB (600.0 / 2, 600.0 / 2) 250),-                   startingCircles = [Geometry.Circle-                                        { position = (300, 300), radius = 10 }]-                 }-  1000--growExample1 :: IO()-growExample1 = growWindow (600, 600) black (colorful 55) 8-  defaultPacking { boxWidth = 600.0,-                   boxHeight = 600.0,-                   seedX = 58387,-                   seedY = 943,-                   boundary = Just (circleB (600.0 / 2, 600.0 / 2) 250),-                   startingCircles = [Geometry.Circle-                                        { position = (300, 300), radius = 10 }]-                 }
− Geometry.hs
@@ -1,33 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Geometry where--data Circle = Circle {-  position :: Point,-  radius :: Float-  }--type Point = (Float, Float)-type Metric = Point -> Point -> Float--euclidean :: Metric-euclidean (x1, y1) (x2, y2) = sqrt ((x2 - x1)**2 + (y2 - y1)**2)--distToCircle :: Point -> Circle -> Float-distToCircle point circle = euclidean point (position circle) - radius circle
+ Graphics/OscPacking.hs view
@@ -0,0 +1,15 @@+module Graphics.OscPacking+       ( module Graphics.OscPacking.Boundary+       , module Graphics.OscPacking.Paint+       , module Graphics.OscPacking.Interpret+       , module Graphics.OscPacking.Geometry+       , module Graphics.OscPacking.Packing+       )+       where++import Graphics.OscPacking.Boundary+import Graphics.OscPacking.Paint+import Graphics.OscPacking.Interpret+import Graphics.OscPacking.Geometry+import Graphics.OscPacking.Packing+
+ Graphics/OscPacking/Boundary.hs view
@@ -0,0 +1,42 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Boundary where++import Graphics.OscPacking.Geometry++type Boundary = Point -> Maybe Float++circleB :: Point -> Float -> Boundary+circleB originP r testP =+  if d > r then Nothing else Just (r - d) where d = euclidean originP testP++rectB :: Point -> Float -> Float -> Boundary+rectB (bLX, bLY) width height (tPX, tPY) =+  if or [tPX < bLX,+         tPX > bLX + width,+         tPY < bLY,+         tPY > bLY + height]+  then Nothing+  else Just $ foldr min (1/0)+       [tPX - bLX,+        bLX + width - tPX,+        tPY - bLY,+        bLY + height - tPY]++  
+ Graphics/OscPacking/Examples.hs view
@@ -0,0 +1,59 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Examples where++import Graphics.Gloss.Interface.Pure.Display+import Graphics.OscPacking++displayExample1 :: IO()+displayExample1 = displayWindow (800, 600) black $+  buildPicture (cycling 0.05 200)+  defaultPacking { boxWidth = 800.0,+                   boxHeight = 600.0,+                   seedX = 42,+                   seedY = 11,+                   boundary = Just (rectB (20, 20) 760 560),+                   startingCircles = [Graphics.OscPacking.Circle+                                        { position = (400, 300), radius = 10 }]+                 }+  1000++displayExample2 :: IO()+displayExample2 = displayWindow (600, 600) black $+  buildPicture (colorful 270)+  defaultPacking { boxWidth = 600.0,+                   boxHeight = 600.0,+                   seedX = 331,+                   seedY = 2010,+                   boundary = Just (circleB (600.0 / 2, 600.0 / 2) 250),+                   startingCircles = [Graphics.OscPacking.Circle+                                        { position = (300, 300), radius = 10 }]+                 }+  1000++growExample1 :: IO()+growExample1 = growWindow (600, 600) black (colorful 55) 8+  defaultPacking { boxWidth = 600.0,+                   boxHeight = 600.0,+                   seedX = 58387,+                   seedY = 943,+                   boundary = Just (circleB (600.0 / 2, 600.0 / 2) 250),+                   startingCircles = [Graphics.OscPacking.Circle+                                        { position = (300, 300), radius = 10 }]+                 }
+ Graphics/OscPacking/Geometry.hs view
@@ -0,0 +1,33 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Geometry where++data Circle = Circle {+  position :: Point,+  radius :: Float+  }++type Point = (Float, Float)+type Metric = Point -> Point -> Float++euclidean :: Metric+euclidean (x1, y1) (x2, y2) = sqrt ((x2 - x1)**2 + (y2 - y1)**2)++distToCircle :: Point -> Circle -> Float+distToCircle point circle = euclidean point (position circle) - radius circle
+ Graphics/OscPacking/Interpret.hs view
@@ -0,0 +1,58 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Interpret where++import Graphics.OscPacking.Geometry+import Graphics.Gloss.Data.Picture hiding (Circle, Point)+import qualified Graphics.Gloss.Data.Picture as P (Picture(Circle))+import Graphics.Gloss.Data.Color+import Data.Colour.RGBSpace+import Data.Colour.RGBSpace.HSL++type Interpretation = [Circle] -> Picture++monoWhite :: Interpretation+monoWhite = (Pictures . map mF)+  where mF (Circle { radius = r, position = p }) =+          Translate (fst p) (snd p) (Color white (P.Circle r))++-- hue :: Int -> Color+hue degrees =+  let rgb = hsl degrees 1 0.7+      (red, green, blue) = (channelRed rgb, channelGreen rgb, channelBlue rgb)+  in makeColor red green blue 1.0+     +colorful :: Float -> Interpretation+colorful offset = (Pictures . map mF)+  where mF (Circle { radius = r, position = p }) =+          Translate (fst p) (snd p)+            (Color (Graphics.OscPacking.Interpret.hue+                      (fromInteger (mod (floor ((r + offset)**2)) 360)))+             (P.Circle r))++cycling :: Float -> Float -> Interpretation+cycling speed offset = (Pictures . map mF)+  where mF (Circle { radius = r, position = p }) =+          Translate (fst p) (snd p)+            (Color (Graphics.OscPacking.Interpret.hue+                      (offset + (fromInteger (mod (floor ((2*pi*r) * speed)) 360))))+             (P.Circle r))+++  
+ Graphics/OscPacking/Packing.hs view
@@ -0,0 +1,81 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Packing (+  Packing(..),+  defaultPacking,+  pack+  ) where++import Graphics.OscPacking.Geometry+import System.Random+import Graphics.OscPacking.Boundary++fit :: Maybe Float -> Point -> [Circle] -> Maybe Boundary -> Maybe Circle+fit cap point srtCircles boundary = fmap+  (\distance -> Circle { position = point, radius = distance })+  (foldr chooseCloser (Just (1/0)) srtCircles)+  where chooseCloser _ Nothing = Nothing+        chooseCloser circle (Just minval) =+          let d = distToCircle point circle in+          if d <= 0+            then Nothing+            else let upperlim = case cap of+                       Nothing -> 1 / 0+                       Just cap' -> cap' in+                   case boundary of+                     Nothing -> Just (min upperlim (min d minval))+                     Just boundary' -> case boundary' point of+                       Nothing -> Nothing+                       Just bDist -> Just (min bDist (min upperlim (min d minval)))++data Packing = Packing {+  boxWidth :: Float,+  boxHeight :: Float,+  capRadius :: Maybe Float,+  boundary :: Maybe Boundary,+  startingCircles :: [Circle],+  seedX :: Int,+  seedY :: Int+  }++defaultPacking :: Packing+defaultPacking = Packing {+  boxWidth = 800.0,+  boxHeight = 600.0,+  capRadius = Nothing,+  boundary = Just (rectB (20, 20) 760 560),+  startingCircles = [Circle { position = (400, 300), radius = 10 }],+  seedX = 1,+  seedY = 2+  }++rndPoints :: Float -> Float -> Int -> Int -> [Point]+rndPoints width height xseed yseed = zip xvals yvals                                     +  where (xgen, ygen) = (mkStdGen xseed, mkStdGen yseed)+        (xvals, yvals) = (randomRs (0, width) xgen, randomRs (0, height) ygen)++-- Provides /infinite/ list of Circles+pack :: Packing -> [Circle]+pack pkg = (startingCircles pkg) ++ build (startingCircles pkg) points+  where points = +          rndPoints (boxWidth pkg) (boxHeight pkg) (seedX pkg) (seedY pkg)+        build accCircles remPoints =+          case fit (capRadius pkg) (head remPoints) accCircles (boundary pkg) of+            Nothing -> build accCircles (tail remPoints)+            Just circle -> circle : build (circle : accCircles) (tail remPoints)
+ Graphics/OscPacking/Paint.hs view
@@ -0,0 +1,47 @@+{--+This file is part of the OscPacking library.+Copyright 2016 Christopher Howard.++    OscPacking is free software: you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation, either version 3 of the License, or+    (at your option) any later version.++    OscPacking is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.+--}++module Graphics.OscPacking.Paint where++import Graphics.OscPacking.Packing+import Graphics.OscPacking.Interpret+import Graphics.Gloss++buildPicture :: Interpretation -> Packing -> Int -> Picture+buildPicture intp pkg maxcircles =+  translate ((-1) * boxWidth pkg / 2) ((-1) * boxHeight pkg / 2)+    (intp (take maxcircles (pack pkg)))++displayWindow :: (Int, Int) -> Color -> Picture -> IO ()+displayWindow (width, height) bg pic =+  display (InWindow "KC" (width, height) (0, 0)) bg pic++displayFullscreen :: (Int, Int) -> Color -> Picture -> IO ()+displayFullscreen (width, height) bg pic =+  display (FullScreen (width, height)) bg pic++growWindow :: (Int, Int) -> Color -> Interpretation -> Int -> Packing -> IO ()+growWindow (width, height) bg intp stepsPerSec pkg =+  simulate (InWindow "KC" (width, height) (0, 0)) bg stepsPerSec+    ([head circles], tail circles) toPic step+  where circles = pack pkg+        toPic (usedCircles, _) = translate ((-1) * boxWidth pkg / 2)+                                   ((-1) * boxHeight pkg / 2)+                                   (intp usedCircles)+        step _ _ (usedCircles, remCircles) = (head remCircles : usedCircles, tail remCircles)+
− Interpret.hs
@@ -1,58 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Interpret where--import Geometry-import Graphics.Gloss.Data.Picture hiding (Circle, Point)-import qualified Graphics.Gloss.Data.Picture as P (Picture(Circle))-import Graphics.Gloss.Data.Color-import Data.Colour.RGBSpace-import Data.Colour.RGBSpace.HSL--type Interpretation = [Circle] -> Picture--monoWhite :: Interpretation-monoWhite = (Pictures . map mF)-  where mF (Circle { radius = r, position = p }) =-          Translate (fst p) (snd p) (Color white (P.Circle r))---- hue :: Int -> Color-hue degrees =-  let rgb = hsl degrees 1 0.7-      (red, green, blue) = (channelRed rgb, channelGreen rgb, channelBlue rgb)-  in makeColor red green blue 1.0-     -colorful :: Float -> Interpretation-colorful offset = (Pictures . map mF)-  where mF (Circle { radius = r, position = p }) =-          Translate (fst p) (snd p)-            (Color (Interpret.hue-                      (fromInteger (mod (floor ((r + offset)**2)) 360)))-             (P.Circle r))--cycling :: Float -> Float -> Interpretation-cycling speed offset = (Pictures . map mF)-  where mF (Circle { radius = r, position = p }) =-          Translate (fst p) (snd p)-            (Color (Interpret.hue-                      (offset + (fromInteger (mod (floor ((2*pi*r) * speed)) 360))))-             (P.Circle r))---  
− Packing.hs
@@ -1,81 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Packing (-  Packing(..),-  defaultPacking,-  pack-  ) where--import Geometry-import System.Random-import Boundary--fit :: Maybe Float -> Point -> [Circle] -> Maybe Boundary -> Maybe Circle-fit cap point srtCircles boundary = fmap-  (\distance -> Circle { position = point, radius = distance })-  (foldr chooseCloser (Just (1/0)) srtCircles)-  where chooseCloser _ Nothing = Nothing-        chooseCloser circle (Just minval) =-          let d = distToCircle point circle in-          if d <= 0-            then Nothing-            else let upperlim = case cap of-                       Nothing -> 1 / 0-                       Just cap' -> cap' in-                   case boundary of-                     Nothing -> Just (min upperlim (min d minval))-                     Just boundary' -> case boundary' point of-                       Nothing -> Nothing-                       Just bDist -> Just (min bDist (min upperlim (min d minval)))--data Packing = Packing {-  boxWidth :: Float,-  boxHeight :: Float,-  capRadius :: Maybe Float,-  boundary :: Maybe Boundary,-  startingCircles :: [Circle],-  seedX :: Int,-  seedY :: Int-  }--defaultPacking :: Packing-defaultPacking = Packing {-  boxWidth = 800.0,-  boxHeight = 600.0,-  capRadius = Nothing,-  boundary = Just (rectB (20, 20) 760 560),-  startingCircles = [Circle { position = (400, 300), radius = 10 }],-  seedX = 1,-  seedY = 2-  }--rndPoints :: Float -> Float -> Int -> Int -> [Point]-rndPoints width height xseed yseed = zip xvals yvals                                     -  where (xgen, ygen) = (mkStdGen xseed, mkStdGen yseed)-        (xvals, yvals) = (randomRs (0, width) xgen, randomRs (0, height) ygen)---- Provides /infinite/ list of Circles-pack :: Packing -> [Circle]-pack pkg = (startingCircles pkg) ++ build (startingCircles pkg) points-  where points = -          rndPoints (boxWidth pkg) (boxHeight pkg) (seedX pkg) (seedY pkg)-        build accCircles remPoints =-          case fit (capRadius pkg) (head remPoints) accCircles (boundary pkg) of-            Nothing -> build accCircles (tail remPoints)-            Just circle -> circle : build (circle : accCircles) (tail remPoints)
− Paint.hs
@@ -1,47 +0,0 @@-{---This file is part of the OscPacking library.-Copyright 2016 Christopher Howard.--    OscPacking is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    OscPacking is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with OscPacking.  If not, see <http://www.gnu.org/licenses/>.---}--module Paint where--import Packing-import Interpret-import Graphics.Gloss--buildPicture :: Interpretation -> Packing -> Int -> Picture-buildPicture intp pkg maxcircles =-  translate ((-1) * boxWidth pkg / 2) ((-1) * boxHeight pkg / 2)-    (intp (take maxcircles (pack pkg)))--displayWindow :: (Int, Int) -> Color -> Picture -> IO ()-displayWindow (width, height) bg pic =-  display (InWindow "KC" (width, height) (0, 0)) bg pic--displayFullscreen :: (Int, Int) -> Color -> Picture -> IO ()-displayFullscreen (width, height) bg pic =-  display (FullScreen (width, height)) bg pic--growWindow :: (Int, Int) -> Color -> Interpretation -> Int -> Packing -> IO ()-growWindow (width, height) bg intp stepsPerSec pkg =-  simulate (InWindow "KC" (width, height) (0, 0)) bg stepsPerSec-    ([head circles], tail circles) toPic step-  where circles = pack pkg-        toPic (usedCircles, _) = translate ((-1) * boxWidth pkg / 2)-                                   ((-1) * boxHeight pkg / 2)-                                   (intp usedCircles)-        step _ _ (usedCircles, remCircles) = (head remCircles : usedCircles, tail remCircles)-
oscpacking.cabal view
@@ -2,9 +2,12 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                oscpacking-version:             0.1.0.0+version:             0.2.1.1 synopsis:            Implements an osculatory packing (kissing circles) algorithm and display.--- description:         +description:+      Implements the simple algorithm for packing an area with circles that are+      'mutually tangent'. Also provides functions for displaying as a picture or+      an animation. license:             GPL-3 license-file:        LICENSE author:              Christopher Howard@@ -16,9 +19,15 @@ cabal-version:       >=1.10  library-  exposed-modules:     Geometry, Interpret, Examples, Packing, Paint, Boundary+  exposed-modules:     Graphics.OscPacking,+       Graphics.OscPacking.Geometry,+       Graphics.OscPacking.Interpret,+       Graphics.OscPacking.Examples,+       Graphics.OscPacking.Packing,+       Graphics.OscPacking.Paint,+       Graphics.OscPacking.Boundary   -- other-modules:          -- other-extensions:    -  build-depends:       base >=4.6 && <4.7, gloss >=1.7 && <1.8, colour >=2.3 && <2.4, random >=1.0 && <1.1+  build-depends:       base >=4.6 && <4.8, gloss >=1.7 && <1.8, colour >=2.3 && <2.4, random >=1.0 && <1.1   -- hs-source-dirs:         default-language:    Haskell2010