@ has joined the channel
optparse-applicative
に関する質問です。サブコマンドで定義したhelp文を`--help`コマンドで表示させる方法はあるのでしょうか。以下のようなコマンドを受け付けることを期待しています:main processTicket --help
command "collectEmails" (info (pure CollectEmails <**> helper) (progDesc "Collect emails requested by single user"))
katip
and log-warper
showed that katip
is much faster and uses less memory than log-warper
.{ high: <上位32bitを表す符号付き整数>, low: <下位32bitを表す符号付き整数> }
Int64
を作り出す方法を考えているのですが、バイナリ力が低くて悩んでおります。shiftL 32
とすればいいのはすぐにわかったですが、下位ビットについてどうすればいいか、教えていただきたいです。{ high: 177247787, low: -813694976 }
761273451934646272
0 then low else ((low :: Int64) + 2 ^ 32)
fromIntegral (negate 813694976) :: Word32
このサーバーおかしいだろう。。。
(-1 :: Word)
shiftL 32
した上位と足し算、で大丈夫…ですよね?多分fromIntegral
する分には問題ないはずです。177247787 `shiftL` 32 + (fromIntegral (fromIntegral (negate 813694976) :: Word32) :: Word64)
fromIntegral
2回使っているところが非常に醜いので TypeApplications
を使ってみました。177247787 `shiftL` 32 + (fromIntegral @Word64 (fromIntegral @Word32 (negate 813694976)))
id
や const
, 今回の fromIntegral
のような多相関数を、「どの型に対する関数にするか」を @<型名>
で明示できるようにしてくれます。id
は a -> a
という型ですが、 id @Int
のように @
で Int
を明示することで、 Int -> Int
として処理させることができます。> :set -XTypeApplications > :t id id :: a -> a > :t id @Int id @Int :: Int -> Int
TypeApplications
を使った方法、間違いでした(最初の方でうまくいったように見えた理由がいまいちわかりませんが)。正しくは :point_down: です。177247787 `shiftL` 32 + (fromIntegral @Word32 @Word64 (fromIntegral @Int32 @Word32 (negate 813694976)))
shiftL 177247787 32 .|. 0xffffffff .&. (-813694976)
.|.
でいいのか。Integer
として処理してしまったもいいんですね。.|.
と +
ってどっちが「善」なんでしょうかね(ill-definedな問).|.
の方が理にかなっていると思いますよ +
の場合桁上がりを考慮しないといけない分わずかに処理が遅くなる可能性もありますが、今回のような計算の場合、起こりえないことがあらかじめわかっていますし。