numeric-prelude
すべてのデータタイプの名前はT
で、すべてのタイプクラスの名前はC
です。の...一貫ために、私は私が一緒にプレーするとしますタイプをインポートせずにデータコンストラクタをインポートします
{-# LANGUAGE NoImplicitPrelude #-}
module Number.SqrtRatio (T(..), ratioPart) where
import qualified Number.Ratio as Ratio
import Number.Ratio ((:%))
import qualified Algebra.Ring as Ring
import NumericPrelude.Base
-- | A number whose square is rational, canonicalized as a rational
-- times the square root of a squarefree integer.
data T x = T {
numerator :: !x,
denominator :: !x,
rootNum :: !x
} deriving (Eq, Show)
ratioPart :: T x -> Ratio.T x
ratioPart (T n d _) = n :% d
fromRatio :: (Ring.C x) => Ratio.T x -> T x
fromRatio (n :% d) = T n d Ring.one
ghc
は感心しない。
Number/SqrtRatio.hs:5:22:
In module ‘Number.Ratio’:
‘(:%)’ is a data constructor of ‘T’
To import it use
‘import’ Number.Ratio(T((:%)))
or
‘import’ Number.Ratio(T(..))
確かにもの仲間、私が遵守することができます:
{-# LANGUAGE NoImplicitPrelude #-}
module Number.SqrtRatio (T, ratioPart) where
import qualified Number.Ratio as Ratio
import Number.Ratio (T((:%)))
-- newly added^
...しかし、これもまたRatio.T
をインポートして、私のT
と矛盾します!
ratioPart :: T x -> Ratio.T x
{- ^-- Ambiguous occurrence ‘T’
It could refer to either ‘Number.SqrtRatio.T’,
defined at Number/SqrtRatio.hs:11:1
or ‘Number.Ratio.T’,
imported from ‘Number.Ratio’ at Number/SqrtRatio.hs:5:22-28
-}
さて、その方法についてimport Number.Ratio (T((:%))) hiding T
?
Number/SqrtRatio.hs:5:31: parse error on input ‘hiding’
私は少し喪失しています。 :/
ああ、そうです。私は、ヘニングがこの命名規則を主張するのをやめることを望んでいる。誰かが冗談を言って言ったように、_彼は自分のデータタイプすべてに自分の名前の後に名前を付けるのが好きです。(** T ** hielemann)...私は自分の選択を尊重し、信頼しているとは言いません。モジュールをプライマリネーミング階層として使用します。とにかく誰もこれをやっていないので、これを本当に一貫して得ることはほとんどできません。そして、場合によっては、あなたがここにあるもののように、実際にはうまくいきません。ドキュメントの可読性については言及しません。正会員:あなたのタイプを「T」と呼んではいけません。 – leftaroundabout
すべてのHaddockページで最初にクリックする必要があるのは、[ソースリンク]です(http://hackage.haskell.org/package/numeric-prelude-0.4.2/docs/src/)。 –
@leftaroundについて私は彼の原因を幾分感じていますが、確かにそれをうまく言語から[良い](http://doc.rust-lang.org/std /error/trait.Error.html)[module](https://doc.rust-lang.org/std/fmt/struct.Error.html)[システム](https://doc.rust-lang.org) /std/io/struct.Error.html)。しかし、それはハスケルではない。 –