haskell-ja > Archives > 2013/06/19

2013/06/19 12:33:08 UTCcutsea110
#
http://hpaste.org/90138
#
http://p.tl/kG-v
#
「Phantom Type(幽霊型)入門ですー>ω<」なんだけど
#
これのtailは動かないぞ
#
deriving (Show)も手元ではアウトなんだが,それはいいとして.
#
tailが動かない理由がどうもスッキリしなかったのでagdaで書いてみようとしたのがhpasteに貼ったやつ
#
module normalのはVec的なやつで,どうやらstdlibのsafe head/tailをやってるのはtoVecとかで内実はVec A Natな形にしているみたい
#
Vec的なやつだとVec A (suc n)のtailの型はそれ自体から計算できてVec A nになるので簡単なんだけど,このblogっぽい形にしようとするとtailの型が元のリストからは自明でないためと思われる.
#
というのを確認したのがmodule specialの方なんだけど
#
それにしてもこれもっとスッキリ書けないのでしょうか?
#
最初はuniverse constructionになるんじゃないかと思ったのでcodeとかdecodeとか用意してたんだけど結局はうまくいかずtail's-codeというad hocなprivate function実装している.
#
Haskellの方は http://hpaste.org/90139 に貼ったけどこっちはtailを実装できず.
#
誰か正解教えてください.
#
圏論勉強会の流れからするとsemigroupあたりを使うのが一番キレイそうな気もするけど,それはまた別の話ってことで
2013/06/19 13:23:52 UTCnotogawa
#
結局"何回安全にtailできるか"の情報が型から落ちちゃうとダメなので,Empty/NonEmptyだけのGADTだけではtailは書けないのでは?