Frege で実行されている実際の Haskell から単語カウントの例を取得しようとしています。
main _ = interact wordCount
where wordCount input = show (length (lines input)) ++ "\n"
しかし、私は得る
can't resolve `interact`
これを行うフレーゲの慣用的な方法はありますか?
Frege で実行されている実際の Haskell から単語カウントの例を取得しようとしています。
main _ = interact wordCount
where wordCount input = show (length (lines input)) ++ "\n"
しかし、私は得る
can't resolve `interact`
これを行うフレーゲの慣用的な方法はありますか?
標準ライブラリにはありませんが、次のように定義できます。
import Data.List(intercalate)
interact :: (String -> String) -> IO ()
interact f = stdin.getLines >>= println . f . intercalate "\n"
更新(Groovy のコメントについてeachLine
):
Frege にはtry
、catch
、がfinally
あり、BufferedReader.getLine
そのような関数を作成するために使用できます。
eachLine :: Reader -> (String -> IO ()) -> IO ()
eachLine reader f = BufferedReader.new reader >>= go where
go breader = forever (breader.getLine >>= f)
`catch` (\(e :: EOFException) -> return ())
`finally` breader.close
try
、catch
およびfinally
次のタイプの関数です。
try :: (Applicative γ,Bind γ) => (α->γ β) -> α -> γ β
catch :: Exceptional β => ST γ α -> (β->ST γ α) -> ST γ α
finally :: IO α -> IO β -> IO α
そして、上記で行ったようにcatch
、 andfinally
なしで使用できます。必要な場合は、Frege ソースからのこのメモを参照してください。try
eachLine
try