2

https://github.com/xich/scotty/issues/26

https://github.com/xich/scotty/pull/27

class ScottyString a where
  toContent :: a -> Content
  toText :: a -> T.Text
  fromScotty :: T.Text -> a

instance ScottyString B.ByteString where
  toContent bs = ContentBuilder (fromByteString bs)
  toText bs = toText $ BL.fromChunks [bs]
  fromScotty = B.concat . BL.toChunks . fromScotty

instance ScottyString BL.ByteString where
  toContent bs = ContentBuilder (fromLazyByteString bs)
  toText = decodeUtf8
  fromScotty = encodeUtf8

instance ScottyString T.Text where
  toContent = toContent . encodeUtf8
  toText = id
  fromScotty = id

instance ScottyString String where
  toContent = toContent . T.pack
  toText = T.pack
  fromScotty = T.unpack

私にとっては問題なく動作しますが、古いコードは壊れています...現在、一部の関数にはデフォルトの型がないためです。

この型クラスのデフォルトの型 ( Textなど) を追加するにはどうすればよいですか?

4

2 に答える 2

4

ところで、私はハックでほぼ同じ Stringable 型クラスを開始しました: http://hackage.haskell.org/package/stringable

すべてを相互に変換する方法を覚えるのにうんざりしたので書いた.

于 2012-09-27T05:46:47.170 に答える
2

型クラスのデフォルトの型などはありません。デフォルト型の単一の「グローバル」リストがあり、default宣言を使用して変更できますが、これは数値型に対してのみ機能し、他の制限の中でも特に現在のモジュールにのみ影響します。詳細については、Haskell レポートを参照してください。

GHC の を使用して何かを一緒にハックできるかもしれませんがExtendedDefaultRules、他の方法であいまいさを解決することをお勧めします。たとえば、より制限された型でヘルパー関数を定義するなどです。

于 2012-09-26T08:51:34.567 に答える