This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
phi/lib/Phi/Panel.hs

44 lines
978 B
Haskell
Raw Normal View History

{-# LANGUAGE ExistentialQuantification #-}
2011-07-12 14:41:25 +02:00
module Phi.Panel ( Position(..)
, Panel(..)
, PanelClass(..)
, (<~>)
, separator
) where
import Data.Function
2011-07-12 14:41:25 +02:00
data Position = Top | Bottom
class PanelClass a where
minSize :: a -> Int
weight :: a -> Float
weight _ = 0
data Panel = forall a. PanelClass a => Panel a
instance PanelClass Panel where
minSize (Panel p) = minSize p
weight (Panel p) = weight p
data CompoundPanel = CompoundPanel Panel Panel
instance PanelClass CompoundPanel where
minSize (CompoundPanel a b) = ((+) `on` minSize) a b
weight (CompoundPanel a b) = ((+) `on` weight) a b
(<~>) :: Panel -> Panel -> Panel
a <~> b = Panel $ CompoundPanel a b
data Separator = Separator Int Float
instance PanelClass Separator where
minSize (Separator s _) = s
weight (Separator _ w) = w
separator :: Int -> Float -> Panel
separator s w = Panel $ Separator s w