Opened 10 years ago

Closed 5 years ago

#1518 closed feature request (wontfix)

Make it possible to evaluate monadic actions when assigning record fields (<-)

Reported by: adde@… Owned by:
Priority: normal Milestone:
Component: Compiler Version: 6.6.1
Keywords: Cc:…
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:


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 {



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

Change History (6)

comment:1 Changed 10 years ago by chevalier@…

If you wrote:

return Bar {
 barFoo <- foo
 barQuux <- quux

which do you think should be executed first -- computation foo or computation quux?

comment:2 Changed 10 years ago by igloo

Milestone: _|_

This is being discussed on the Haskell' list:

comment:3 Changed 9 years ago by simonmar

Architecture: UnknownUnknown/Multiple

comment:4 Changed 9 years ago by simonmar

Operating System: UnknownUnknown/Multiple

comment:5 Changed 5 years ago by morabbin

Type of failure: None/Unknown

Bump; still relevant? Seems a bit iffy to me.

comment:6 Changed 5 years ago by liyang

Cc:… added
Resolution: wontfix
Status: newclosed

Is this really necessary now that we have RecordWildCards, NamedFieldPuns and Applicative? (All of which were mentioned in the Haskell' discussion.)

Note: See TracTickets for help on using tickets.