Concurrent Clean : 文字列の一意性型属性
id:sshiさんの指摘が気になって、あれこれ試してみたら、全然共有できるんですけど。
たとえば、こんな感じ。
Start w = w --> stdio --> \(f,w) = f --> fwrites "input >" --> freadline --> \(line, f) = f --> fwrites $ reverseStr line --> if (line == "123") id (trace "ng") --> flip fclose w --> \(ok,w) = if ok w (trace "error on close" w) reverseStr :: {#Char} -> {#Char} reverseStr s = {c \\ c <- reverse [c \\ c <-: s]}
あれー。たしかにStdFileの関数型宣言には、一意性型属性がついてるのに・・・。
-
-
- -
-
当然、こういうのはとおらないんだけどなぁ。
useUniqStr :: !*{#Char} !*File -> (!*{#Char}, !*File) useUniqStr line f = f --> fwrites $ reverseStr line --> if (line == "123") id (trace "ng") --> \f = (line, f)