詳しい事情はhaskell-cafeあたりで何度か触れられていると思います(自分もぶっちゃけよく調べてない...
https://takenobu-hs.github.io/haskell-wiki-search/?siteview=full からチェックを入れて検索してみてください。
https://takenobu-hs.github.io/haskell-wiki-search/?siteview=full からチェックを入れて検索してみてください。
ST s Int
ではなく Int
を返せば、 runSTTest ... >>= f
ではなく f (runSTTest ...)
と書けるので恰好いいtype STTest s = forall s. ST s (Test s)
forall s. Test s -> STTestとなり
unsafeIOToST . unsafeSTToIO
でsの型を強引に合わせられるので、それを使えばなんとか……という感じですtruncate 1.1
1truncate (1/0)
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216truncate $ log $ (-1 :: Double)この挙動のせいで,ループが無限に終わらないのに気づくのに一日費やしました,,笑
-269653970229347386159395778618353710042696546841345985910145121736599013708251444699062715983611304031680170819807090036488184653221624933739271145959211186566651840137298227914453329401869141179179624428127508653257226023513694322210869665811240855745025766026879447359920868907719574457253034494436336205824
(1/0)
は NaN
じゃなくて Infinity
かと。Int
にしていると 0
が返るみたいです(でもこれも環境依存かもだし、あまり期待しない方がいいかも)。> truncate (0.0 / 0.0) :: Int 0
truncateSafe x的な対処でやり過ごしますが,
| isNaN x =
| isInfty x =
a .+ b = (+) <$> a <*> bのような形で中置演算子を定義していけば,そのまま内部で使えそうだという方法が結構ニーズに近いものだったかもしれません
vector
のbugfixを書いているんですが、 INLINE
関数がloopbreakerになってしまっているかってどうやって検証するんでしたっけ?-ddump-ds
とかですね?cabal exec ghc
(これがどれくらいまともに稼働するコマンドか理解していません)か stack ghc
か、またはそれに類する何かを走らせるにはどうすればいいでしょうか? ghc -ddump-simpl
で確認したいのですが、別にtestをいきなり追加したいわけではないし、自分のパッケージでもないので、いきなりそのパッケージの cabal.project
を弄るのにも抵抗があるんですよね・・・。(いやもちろん git-managedなので弄るのに問題はないんですが)stack build
した上で stack exec ghc
すればいけるはずだったかと。stack.yaml
と package.yaml
を ***.cabal
から適当に作ってから,ってことになるんでしょうか.stack init
はしないといけませんね(別に package.yaml
は必須じゃないですよ!)。cabal build
してから cabal exec ghc
でいけるはずです(普段cabal使わないのでちょっと自信ない)cabal v2-repl
で正常にロードできるコードがあります。:t
で確認した型をそのまま型シグネチャとして追加して :reload
するとエラーになる。cabal exec ghc
を試したのですが、import Data.Vector main = return ()
cabal.project
も vector.cabal
すらも読んでない… (`vector.cabal` に記述があるはずの vector.h
が発見できないとか抜かしやがりましたので)。stack ghc
と、あと cabal.project.local
を用いた cabal build
を試してみます。