詳しい事情は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 を試してみます。