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:  [EMAIL PROTECTED]  |          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

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to