haskell の標準エラー出力、C++的に言うところの std::cerr 的なそれのメモ
Haskell で標準エラー出力
import System.IO main :: IO () main = case f of Right a -> putStr a Left a -> hPrint stderr a f :: Either String String f = ...
※EitherのLeftもRightもStringなのは、この例ではそれぞれ標準エラー出力と標準出力へと出力しているのでShowのインスタンスの具体例として。
↓C++的に↑に似た感じの表現をすると
<iostream> struct f { ... }; int main() { f a = ... ; if( a.isSucceeded() ) std::cout << a.result(); else std::cerr << a.error(); }
※f.isSucceededをHaskellのEitherの代わり、f.errorとf.resultをそれぞれHaskellのEitherのLeftとRightに当たる感じで定義してあるという想定。
でっていう?
あんまりエラー出力を使うコード例を見掛けない気がしたのでメモ。ちなみにC#的に言う System.Diagnostics.Debug.Write に当たる役割は haskell 的には Debug.Trace.trace 。