Haskellの言語拡張

  • 誰かが使っている、derivingによるクラス継承が、自分の環境では動かなかった
  • 調べ物をしたら、どうも「誰か」は言語拡張を使って、クラス継承を暗黙的にできるようにしているらしかった
  • その言語拡張は{-# LANGUAGE GeneralizedNewtypeDeriving #-}とハスケルファイルに書くべきもの(こちら)
  • 具体的には、Doubleを読み替えたかった
newtype Prob = Prob { toDouble :: Double}deriving (Show, Eq, Ord, Num, Fractional, Real, RealFrac, Floating)
  • NumをDerivingしようとして、ダメ!と言われていた
  • 確かに、以下のようなファイルを書いて、ghciで
:l hoge.hs
  • とするとエラーが出なくなる
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
newtype Prob = Prob { toDouble :: Double}deriving (Show, Eq, Ord, Num, Fractional, Real, RealFrac, Floating)

prob :: Double -> Prob
prob x = Prob x
  • さて。この言語拡張をghci上でやりたいとする
:set -XGeneralizedNewtypeDeriving
  • と書く(こちら)
  • 結局
    • 言語拡張名は "GeneralizedNewtypeDeriving"であって
    • "HogeHage"なる名前の言語拡張があったときに
    • それをhsファイルにして読み込むときの「言語拡張ですよ」という書式が
{-# LANGUAGE HogeHage #-}
    • であって
    • それのghciコマンドの書式が
:set -XHogeHage
    • ということ
    • これがわかってみた上で、本家のサイト(こちら)を見ると、確かにその通りに書いてある・・・けれど読み取れなかった・・・