Concurrent Clean のレコード型

レコード型は、便利なようで不便なようで。
[id:lethevert:20050911:p1]
このときにもちょっと書いたけれど、レコード型に関するTipsは、集めておかないと不便な思いをする気がする。

SomeRecord =
{ integerValue :: Int , stringValue :: String , doubleValue :: Real } ... (rec =: {integerValue = iVal, stringValue = sVal}) = getSomeRecord ...

強調表示したようにすると、レコードとその要素を一括して束縛できる。
下のような簡略表記も可

  {integerValue = iVal, stringValue = sVal} = getSomeRecord ...
  {integerValue, stringValue} = getSomeRecord ...

この記法は、関数のパラメータにも使える。

      • -

(10/Oct/2005 追記)
typo発見。ところで、「=:」は、レコード型に限らず、いろいろな局面でつかえるようだ。
たとえば

sampleFunction (lst =: [(first =: {name, value}) : rest])
  ...

みたいにすれば、引数で受け取ったリストの中身をその場で展開できる。