Skip to content

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

It is currently not possible to build records from values resulting from monadic actions while still using the field-specifiers.

foo :: IO Int

  1. ..

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

}

  1. 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
Trac metadata
Trac field Value
Version 6.6.1
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information