haskell-jp / random #8

@tsubaki has joined the channel
パッケージって、そんなに fork してるの?
@ has joined the channel
hackage でバージョンを変えずに metadata を変えられることが諸悪の原因?
先ほどRedditで見かけました。
Snoymanからのコメントが。
https://www.snoyman.com/blog/2018/01/slurp
速すぎて読みきれなかったのですが、一旦収束(park)方向のようですね、、、
恥ずかしながら :point_up: の騒動の背景にあるらしいHackage Revisionsと言うのを存じてませんでした。。。
https://github.com/haskell-infra/hackage-trustees/blob/master/revisions-information.md
@yokomotod has joined the channel
この間Haskellerを募集している、と言うことで話題になったIOHKが開発するCardanoというブロックチェーンを支えるCardano Foundationと、FP Completeが提携するそうで。
https://www.fpcomplete.com/blog/fp-complete-and-cardano-blockchain-audit-partnership
https://www.reddit.com/r/haskell_jp/comments/7kjb85/iohk%E3%81%A7%E3%81%AFhaskell%E9%96%8B%E7%99%BA%E8%80%85%E3%82%92%E5%8B%9F%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99/
今まで、slackに情報ながれてたのに、理解できてませんでした^^
Cardanoすごいですね、コントラクトをHaskellベース言語で書けて、仮想マシン層があってレジスタベース!
Ethereum/Solidityよくできてるなぁと最近知り始めたのですが、Cardanoの先進突き抜け感は尋常じゃないですね。
あと、「関数プログラミングの楽しみ」本の6章の「金融取引契約の書き方」の考えが源流の1つにあったり。
先見先進な人たちがいますね〜:telescope:
@ has joined the channel
@ has joined the channel
@emag has joined the channel
@kazu has joined the channel
@nobkz has joined the channel
@ has joined the channel
@rei has joined the channel
@ has joined the channel
Solidity(Ethereum)とPlutus(Cardano)を軽くみていて、思い出したHaskellの面白い例の紹介です。
Phantom型(幽霊型)を使って数値型の誤った混在を防ぐ例です。
(Don Stewartさんの、資料に書かれてたはずなのですが、資料のURLがなくなってました。)
コード例は以下です。
  

使い方はこんな感じ。 例えば、Int同士を混在しないように、型で分けるというものです。
GHCの言語拡張なしの基本的な機能でも、便利なことができます。
なお、Valはnewtypeで定義されているので、実行時にはValは消えて実行時オーバーヘッドなしです。

ghci> x1 = 1 :: Wei
ghci> x2 = 5 :: Wei
ghci> x3 = 10 :: Ether

ghci> x1 + 1
2
ghci> x1 + x2
6

ghci> x3 + 1
11
ghci> x1 + x3
<interactive>:17:6: error:
    • Couldn't match type ‘XEther’ with ‘XWei’
      Expected type: Wei
        Actual type: Ether
    • In the second argument of ‘(+)’, namely ‘x3’
      In the expression: x1 + x3
      In an equation for ‘it’: it = x1 + x3
stack のイシューには newcommer friendly ってラベルがあるんですね https://github.com/commercialhaskell/stack/labels/newcomer%20friendly
レイヤーが違うのが混ざっているとはいえ、めっちゃ多い :joy:
https://www.reddit.com/r/haskell/comments/7tx0o4/haskell_3_sql/
ShowはReadと一緒にderivingにして、シリアライズ/デシリアライズに使った方が便利という学びを得ました。画面出力用の文字列化関数なんかは別名で作った方がいい。 :memo:
Showはあくまでもデバッグ用と考えた方がいいですもんね!
HRRを推していこうな:muscle:
禿同
show . read = id
read . show = id

であってほしい
SQLiteの文字列フィールドに代数データ型を書き込むのに使ってみたり。内部データだからまあ良いかなと思いました
あと、表示用関数は機能拡張するときに、フォーマットオプション等の引数を追加する場合がある、というのもあります。
@ has joined the channel
ほげほげ`foo`bar`ふがふが
おー
@doanobu has joined the channel
@MonogusaBose has joined the channel
librariesのMLに面白そうな話が流れてました。
containersパッケージを、Formal verificationする?、という話のようです。
HaskellソースからCoq(理解してません)へのコンバータ(hs-to-coq)があるのですね。
https://mail.haskell.org/pipermail/libraries/2018-February/028473.html
HaskellのADTをCoqに持っていくと,Inductive/Coinductive両方の性質をどうにかしないといけなくなるのどうしてるのかと思って
見てみたら,ワリキリでInductive決め打ちなんですね
Int みたいな桁あふれの問題があるデータ型をどうするのかきょうみがあるんですが、なにやら Import IntToZ してますね。
あと、証明した性質に過不足がないか、どう証明するんでしょうか?
FitSpecを使うと、テストの重複を教えてくれたような気がする。
In the case of fixed precision types, we have chosen these mappings for expediency; in future work, we plan to switch these definitions so that we can reason about underflow and overflow.
future plan といいつつ、きっと取り組まないでしょうねぇ。。。
Set の API のオーダーを保証するには、木が平衡していることを証明しなければいけないけれど、平井くんをもってして3万行必要だった。。。
現在,hpackでescape hatchのためにverbatimフィールドを追加する案が出ています.現状,Cabalとの相互運用が難しい状況ですが,それに対していい対案が無い状況なので,もし何かもっといいアイデアをお持ちの方はコメントしてみると,今後のhpack利用が快適になるかもしれません
https://github.com/sol/hpack/pull/260
普通にいいアイディアだと思うので :+1: しました
ただ,この方法だと https://github.com/sol/hpack/issues/262 にある通り,既存の設定を上書きすることができないんですよね
takano-akioさんのBlockArguments提案の実装が、ghcのmaster分岐にlandedしました。
ghc 8.6.1 から正式に使えるようになります。
https://phabricator.haskell.org/rGHCbe84823b956f0aa09c58d94d1901f2dff13546b4

詳細仕様はこちら。
https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0010-block-arguments.rst

do, let, case, if などの式のカタマリを、「括弧なし」で、引数箇所に書けるようになります。
昔の文章のようですが、面白いものを見つけました。(まだ読み込んでないですが有名なものですかね。)

The Haskell Road to Logic, Maths and Programming
https://fldit-www.cs.uni-dortmund.de/~peter/PS07/HR.pdf