measurable

A simple shallowly-embedded DSL for dealing with measures.
Log | Files | Refs | README | LICENSE

commit ca72b1b4923b49b606c3746707b6dc021ef95b49
parent 620d56e17b410aa20251e2be592a938686434262
Author: Jared Tobin <jared@jtobin.ca>
Date:   Tue, 22 Oct 2013 11:16:27 +1300

Remove type signatures in CRP example to avoid scaring off non-Haskellers.

Diffstat:
Msrc/Examples/ChineseRestaurantProcess.hs | 20+-------------------
Msrc/Measurable/Generic.hs | 1-
2 files changed, 1 insertion(+), 20 deletions(-)

diff --git a/src/Examples/ChineseRestaurantProcess.hs b/src/Examples/ChineseRestaurantProcess.hs @@ -15,32 +15,19 @@ data Table = Table { instance Ord Table where t1 < t2 = _people t1 < _people t2 -$(makeLenses ''Table) +makeLenses ''Table -- | Mass function for a given table. It's dependent on the state of the -- restaurant via 'n' and 'newestTable'. -tableMass :: (Fractional a, Integral b) => b -> a -> Table -> Table -> a tableMass n a newestTable table | table^.number == newestTable^.number = a / (fromIntegral n + a) | otherwise = fromIntegral (table^.people) / (fromIntegral n + a) -- | A dependent measure over tables. -tableMeasure - :: (Fractional r, Integral b, Applicative m, Monad m, Traversable t) - => b - -> r - -> Table - -> t Table - -> MeasureT r m Table tableMeasure n a newestTable = fromMassFunction (return . tableMass n a newestTable) -- | A probability measure over restaurants, represented by IntMaps. -restaurantMeasure - :: (Fractional r, Monad m, Applicative m) - => r - -> IntMap Table - -> MeasureT r m (IntMap Table) restaurantMeasure a restaurant = do let numberOfCustomers = sumOf (traverse.people) restaurant numberOfTables = lengthOf traverse restaurant @@ -59,11 +46,6 @@ restaurantMeasure a restaurant = do -- -- This implementation is dismally inefficient as-is, but appears to be -- correct. I think I need to look at doing memoization under the hood. -chineseRestaurantProcess - :: (Enum a, Eq a, Fractional r, Monad m, Applicative m, Num a) - => a - -> r - -> MeasureT r m (IntMap Table) chineseRestaurantProcess n a = go n IntMap.empty where go 0 restaurant = return restaurant go j restaurant = restaurantMeasure a restaurant >>= go (pred j) diff --git a/src/Measurable/Generic.hs b/src/Measurable/Generic.hs @@ -11,7 +11,6 @@ import Data.List import Data.Monoid import qualified Data.Set as Set import Data.Traversable hiding (mapM) -import Numeric.Integration.TanhSinh type MeasureT r m a = ContT r m a