Haskellのerrorで嵌る
次のような作りかけのコードを書いていました。error
の部分はあとで修正していくつもりでした。コーディングが進んで、error
の部分をコーディングする段階に来たのですが、show t
の内容が出力されませんでした。
paramMetaData2TypeString_ (VAR tipe len) = case tipe of (VARLEN_BYTELEN_TYPE t) -> case t of INTNTYPE -> case (lengthTYPE_VARLEN len) of 0x01 -> "tinyint" 0x02 -> "smallint" 0x04 -> "int" 0x08 -> "bigint" _ -> error "not yet implemented. type=" ++ (show t) -- TODO
結局error
の後に$
が抜けているだけなのです。
ただ、$
がなくてもタイプチェックになってしまうのが落とし穴でした。
> > :t error error :: [Char] -> a > error "foo" *** Exception: foo CallStack (from HasCallStack): error, called at <interactive>:25:1 in interactive:Ghci2 > :t error "foo" error "foo" :: a > -- $をつけない > error "foo" ++ show "bar" "*** Exception: foo CallStack (from HasCallStack): error, called at <interactive>:27:1 in interactive:Ghci2 > :t error "foo" ++ show "bar" error "foo" ++ show "bar" :: [Char] > -- $をつける > error $ "foo" ++ show "bar" *** Exception: foo"bar" CallStack (from HasCallStack): error, called at <interactive>:32:1 in interactive:Ghci2 > :t error $ "foo" ++ show "bar" error $ "foo" ++ show "bar" :: a >