Пусть имеем:
data Contract = Contract {number::String, positions::[Pos]}
data Pos = Pos {unit::Unit, cost::Int}
data Unit = Unit {unit::String, minCost::Int, maxCost::Int}
gen :: Gen String -> Gen Unit -> Gen Unit -> Gen Contract
gen numberG mainUnitG otherUnitG = liftM2 numberG (sequence [posG mainUnitG, posG otherUnitG])
where posG :: Gen Unit -> Gen Pos
posG u = liftM2 Pos u (choose (0, 100))
А как мне определить posG, так, чтобы позиция генерировалась с
с ценой, согласно диапазону, взятому из единицы учета (unit-а)?