Make it possible to evaluate monadic actions when assigning record fields

Adde adde at trialcode.com
Tue Jul 10 10:38:22 EDT 2007


Hi, I'm forwarding this feature request as is on the advice of Neil
Mitchel for discussion / possible inclusion in future versions of
Haskell.

#1518: Make it possible to evaluate monadic actions when assigning
record fields (<-)
---------------------------------+------------------------------------------
  Reporter:  adde at trialcode.com  |          Owner:         
      Type:  feature request     |         Status:  new    
  Priority:  normal              |      Milestone:         
 Component:  Compiler            |        Version:  6.6.1  
  Severity:  normal              |       Keywords:         
Difficulty:  Unknown             |             Os:  Unknown
  Testcase:                      |   Architecture:  Unknown
---------------------------------+------------------------------------------
It is currently not possible to build records from values resulting from
monadic actions while still using the field-specifiers.

 foo :: IO Int
 ...

 data Bar = Bar {
   barFoo :: Int
 }

 buildBar :: IO ()
 buildBar = do
   return Bar {
     barFoo <- foo --Evaluate foo to get the Int-value
   }

 I've found two possible ways of doing this:

 1) Using temporaries to evaluate the actions before assigning which
 doubles the number of lines:

 tmp <- foo
 return Bar {
   barFoo = tmp
 }

 2) Lifting the record constructor which prevents you from using field
specifiers (and you really need field specifiers when dealing with
larger records):

liftM Bar foo

Thanks,
Adde



More information about the Haskell-prime mailing list