haskell-jp / questions #14

Topic Request で OK です
あれ、なかったっけ。了解です。
ありがとうございます。ブログについては見落としてました。この記事の3つの拡張ポイントが * のカインドとどう関係しているか、については、時間があるときに原論文を呼んでみたいです。
こんな感じで型レべルリストに対する (:) 演算子みたいなものを作りたいのですが、どこかのパッケージで定義されていたりしないでしょうか。

class KList (f :: k -> *) (g :: [k] -> *)
  where
    (<:<) :: f x -> g xs -> g (x ': xs)

-- 利用例 (実際にはSingではなく情報のある型を使いたい)
instance KList Sing Sing
  where
   x <:< y = SCons x y

main =
  do
    let s = (sing :: Sing "orange") <:< (sing :: Sing '["apple", "grape"])
    print $ fromSing s


自分の作る型に対して専用の演算子を作ってもいいのですが、演算子をいたずらに増やしたくないので既存のものがあったら使いたいと思った次第です。
Fractionalのインスタンスに必要なのって (/)fromRational なので、「可除数」とかじゃダメですか。
有限体もFractionalなので。
自分で定義するにしても(:)演算子に限定せずに、singletonパッケージのTyFunに対して付随する値レベルの演算をインスタンス宣言できるように、型クラスを定義するのがベターかなと思いました
@info has joined the channel
分数という訳語は、さんざん思案した結果採用したものです。:thinking_face:感覚的には可除数というのもありかなと思います。
shelarcy 著「本物のプログラマはHaskellを使う」は2013年の良記事 http://tech.nikkeibp.co.jp/it/article/COLUMN/20060915/248215/?ST=develop ですが 最新の Haskell に合わせた改訂版はありますか?
またこのような詳しいレベルの日本語解説記事が他にもあれば教えて下さい。
虎本の訳者である @nobsun さんから直接コメントいただけるとは感激です。訳者の皆さんが単語一つ一つに適切な訳語を選ぶために大変なご苦労されていることは存じ上げております。今回の皆さんのご指摘で、自身の分数のイメージが有理数側に偏っていたのが分かり大変勉強になりました。今後も宜しくお願いいたします。
これ、別に左辺が f x の形をしている必要はない事に気づいたので、APIを工夫して左辺が g xs -> g (x:xs) になるようにして、ユーザーには $ 演算子で適用してもらう事にしました。
@maru8m.jp has joined the channel
初学者です。「すごいHaskellたのしく学ぼう」の以下の記載(p121)、
具体型とは、型引数を1つも取らない型か、あるいは、型引数を取るけれどもそれが全て埋まっている型のことを指します。
これについて、
1. 「埋められていない型引数がある型」というのは hoge :: [a] -> b[a] などを想像していいものでしょうか?またはこの時の b も?
2. 「埋められていない型引数がある型」というのは「抽象型」と呼んでいいのでしょうか?それともまた別の用語がありますか?

まとめ
1. どちらも具体型。 (->)([a] ->) がそれに該当し、型コンストラクタではあるが具体型ではない。また「型」という語には具体型のみを指す場合と、それ以外のものも含む場合があり、文脈に気を付けること( Maybe a でなく Maybe を型と呼ぶ場合がある、という話)
2. 呼ばない。
1つめの質問だと (->)([a] ->) が「埋められていない型引数がある型」ですね
ありがとうございます、 (->) って型コンストラクタなんですか…?と思ったらすごいH本のp231にその旨の記載がありますね…その周辺をざっと読んだ限りFunctorまで読めばこの疑問は解決しそうな気がしてきました。
2つめの質問の回答になってるか分からないですが、『型システム入門』では、例えば id の型は a -> a ですが、拡張を使えば forall a. a -> a と書けて forall a. T のような型を全称型といいます。
またそのような型を持つ項を型抽象といいます。
(誰かに合ってるかチェックしてもらいたい
「具象型」と呼ばれているのは Int Maybe Int Maybe a など、そうではない型コンストラクタは Maybe のことですね。混乱したらカインドを考えて、カインドが * のものが「具象型」と思うのがわかりやすい気がします。
「具象型」ではない型コンストラクタのいい呼び方は、私は知りません。単に型コンストラクタと言ってしまうことも多いような・・・。
Data.Array.IOで謎の挙動を踏んでしまって困っているのですが誰か助けてください…
配列の要素の1つ目には値を代入していないのに変化してしまうのですが…
https://wandbox.org/permlink/cDzxFPMREeY0JSAE
17行目 print =<< readArray arr nn じゃなくて i じゃね?
あっ……
すごいH本にカインドの記述が見られなかったので調べてきました、がそれなりに難しそうですね…Wikipedia の記載ですが、カインドが * を「零項の型コンストラクタ」というのは気に入りました、1以上の項の型コンストラクタを指す特別な用語がない、というのも何となく納得です。
すごいH本にカインドの記述が見られなかったので
Functorを説明しているあたりにあるはずですよ!
うおおおー、7.11(p155)にありますね!
あと今見たら「種類」としては索引にありますね、「種(しゅ)」を探せば見つけられたのか…「kind」と「種(たね)」しか探してませんでした、ありがとうございます!
Haskell 入門の p87 の注釈欄 *13 の下記の記載を見て何となく理解しました。
> IO や Maybe はカインドが * ではないので正確には型ではありませんが、(略)
私の当初の疑問は
> 具体型とは、型引数を1つも取らない型か、あるいは、型引数を取るけれどもそれが全て埋まっている型
という文から、型の中に具体型とそうでないものがある、という想像をしたのですが、実際には型と具体型は同じもので、型コンストラクタのうち特殊なものを型と呼ぶ、という理解になりました(間違ってたら誰かご指摘ください…)
大丈夫なように思います。一点、「型」という語は具体型のみを指す場合と、それ以外のものも含む場合と両方あるので、読むときはそこに注意が必要ですね。
英語で質問する場所ってどこがいいです?Haskell Cafe思ったより人がいなくてもうメジャーじゃないのかな
あとHaskellのメーリングリストにホスティングサイトの脆弱性っぽいの投げたけど他の場所だったら投げなおします
英語だと Stackoverflow は Haskell の質問は結構投稿されていますね。ディスカッション寄りのことがしたいのであれば別の場所があるかもしれないですが、ちょっと私は分からないです。
Stackoverflowは功徳を積んでなくて投稿できないので今回は無理そうです。ここの皆さんは功徳を積んで投稿されてるんですかね
いや今見たら投稿できるっぽいな…今度そっちも試してみます
Haskellでマイナー気味なDBを使おうとするとドライバがなくてRustに流れそうなんですがこれはもうあきらめるところでしょうか…
どのMLのことですか?
僕もRocksDB使ってみたいなーとか思いますね
cardano-sl で使われてるやつですね!
NoSQLはRest APIがあるようなのでそっちで頑張れるか試す予定
バインディングとしてchrisdoneが作ったrocksdb-haskell-ngが使われているんですね。情報ありがとうございます。
https://github.com/chrisdone/rocksdb-haskell-ng
メーリスでもRCリリースの告知ありましたがRedditのほうが食いつきいいですね
コピペ

I become aware of the problem that
https://mail.haskell.org/mailman/listinfo/haskell send a password to
http://mail.haskell.org/cgi-bin/mailman/subscribe/haskell. Probably it
means this page will send a password without encryption. Could you use
https instead of http, or remove this duplicate page? I had used
https://mail.haskell.org/cgi-bin/mailman/listinfo/haskell instead.
なるほど。その程度でしたらわざわざセキュリティー専用のチャンネルを探す間でもないですね:cold_sweat::cold_sweat::cold_sweat:
うっかりパスワード丸見えで送るとこだったので早く直してほしい
Text 型で String のようなパターンマッチはできませんか?
正規表現は使いたくないんですが、そうするとParsec使うしかないのでしょうか?
正規表現を使うほど複雑な処理はわかりませんが、 ViewPatterns , OverloadedStrings を使えば先頭からxxxとかのマッチはできると思います。
私も OverloadedStrings と文字列リテラル ( "..." ) のパターンを ByteString 等で良く使います。
AtomのHIEでStylish Haskellはどう適用するんでしたっけ?以前できたはずなのに思い出せない
なるほど。 ViewPatterns 覚えないと。
ありがとうございます!