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 +0/−42
- Examples.hs +0/−63
- Geometry.hs +0/−33
- Graphics/OscPacking.hs +15/−0
- Graphics/OscPacking/Boundary.hs +42/−0
- Graphics/OscPacking/Examples.hs +59/−0
- Graphics/OscPacking/Geometry.hs +33/−0
- Graphics/OscPacking/Interpret.hs +58/−0
- Graphics/OscPacking/Packing.hs +81/−0
- Graphics/OscPacking/Paint.hs +47/−0
- Interpret.hs +0/−58
- Packing.hs +0/−81
- Paint.hs +0/−47
- oscpacking.cabal +13/−4
− 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