koyama41
OOP 脳に洗脳されていると、二項演算子の左と右が同じ型でないといけないっていうこと自体がびっくりだろうからそれを言おうとしてるのかなあ、と。
(種, 種, …, 型, 型, …)
という組で、インスタンスはそれに対応する (型, 型, …, 値, 値, …)
という組というイメージ(ただし Haskell では、インスタンスは型の組合せの部分で一意にならないといけない)newtype
なりで自分自身の考えるインスタンスを追加するべきというのが現状のHaskellの主流ではないでしょうか?( orphan instance の警告が出るのがそれを示していると思います.この辺は shadowing も事情が似てる気がします)newtype
によって新しいインスタンス宣言は作っていくべき,ただ注意深く管理しリスクを許容するなら使うべき時はあるかもしれないというのが,個人的に知る限りのベストプラクティスだとは思いますね(ただあまり納得はできていないのですが)一方これらのライブラリの製作者側の立ち位置に立った時にお互い相手の存在を認知したときに自分(のライブラリの次期バージョン)でインスタンス宣言を書きたくならないのかなあ、というところが疑問のポイントでした。よっぽどの需要がない限り書く必要がないと考えるんじゃないかな。。mizunashiさんがいうとおりYのデータ型をnewtypeでくるんで、そのくるんだ型でインスタンス定義すればいいだけだし。
第三のライブラリとして orphan instance のみを提供するライブラリが出現する、というのが流れなんですかねえ、この場合は。だと思いますよ。現にそういうライブラリーはたくさんありますし。
それを正しく解析できていません。:thinking_face: どんな結果になるんでしょうか?
traceShowId
で怪しいところにデバッグコードを挟んでみるのもよいんじゃないかとbulletPointParser
が間違っているというのはあっていて,具体的にはそれぞれの要素で lookAhead
に入る前に空白を replicateM_
で消費してる数に注目してみるのが良い気がします.