[SIMILAR] WITH 65975 boolvector WITH 65975 intvector WITH 49481 vectorelem WITH 34345 vector WITH 24256 instance WITH 21016 seq WITH 17684 bool WITH 16493 families WITH 16493 現da WITH 13055 where WITH 8718 first WITH 8246 textdata WITH 8246 typefamilies WITH 7323 型パ WITH 7159 qualified WITH 7055 殊化 WITH 7055 言内 WITH 5749 data WITH 5415 sequence WITH 4158 add WITH 3519 int WITH 3338 class WITH 2985 のve WITH 2843 宣言 WITH 2569 haskell WITH 2528 language WITH 1926 family WITH 1914 head WITH 1491 関数 WITH 1285 特殊 WITH 1281 表現 WITH 1155 で表 の検索結果 169 件中 1 - 10 件目 (0.060136368 秒)
Invalid TextData Familiesは、型パラメータに依って実装を変えたいときに使えます。C++のテンプレートでの特殊化みたいなものでしょうか。 {-# LANGUAGE TypeFamilies #-} import qualified Data.Sequence as Seq data family Vector a -- BoolのVectorはリストで表現 data instance Vector Bool = BoolVector ...
上の例だと、GADTを使っても同じような事ができます。 {-# LANGUAGE GADTs #-} import qualified Data.Sequence as Seq data Vector a where BoolVector :: [Bool] -> Vector Bool IntVector :: Seq Int -> Vector Int add :: a -> Vector a -> Vector a add v (BoolVector l) = BoolVector $ v:l add v (IntVe ...
# (スコア:9261)
しかし、上のような例だと、Collectionを型クラスではなくて型構築子クラスにすれば、Synonym Familiesを使わなくても書けます。 class Collection c where empty :: c a add :: a -> c a -> c a instance Collection [] where empty = [] add = (:) instance Collection Seq where empty = Seq.empty add = (< ...
# (スコア:5380)
Invalid Text次はSynonym Families。引数の型によって関連づけられた型を変えたいときに使います。C++でいうところの、特殊化されたテンプレートの中のtypedefとでも言えるでしょうか。 ありがちな例としては、コレクションクラスがあります。 class Collection a where type Elem a empty :: a add :: Elem a ...
# (スコア:3033)
以前書いたように、evc4でビルドするとmips版がINTERNAL COMPILER ERRORになってしまっていたのですが、どうやらvector<bool>が原因だったようで、vector<int>にしたところその部分は通るようになりました。 ...
# (スコア:2808)
std::vector<int> dst; dst.resize(src.size()); std::copy(src.begin(), src.end(), dst.begin()); のようにして明示的にコピーする(ただし、resize()は例外を投げる可能性があるため、後述する処理が必要)。 やる必要があるのは、mallocが失敗したときに、::RaiseExceptionを使って適当なSEH例外を投げ、呼 ...
# (スコア:2808)
Windows CEでSTLを使うという話は結構あって、<a href="http://www.stlport.org/>STLportとか、STL for eMbedded Visual C++ - Windows CEとかがある。 ところが、これらのものはそのままでは特別な状況でもない限り使い物にならない。というのは、 1. STL(特にコンテナ)はC++例外に全面的に依存している 2. ...
# (スコア:2760)
Type Familiesを使って型レベルで階乗を実装してみます。基本の考え方としては、dataで定義する型が型レベルの値で、type familyで定義する型属が型レベルの関数になります。 まずは、数の定義から。EmptyDataDecls拡張を使います。 {-# LANGUAGE TypeFamilies, EmptyDataDecls, UndecidableInstances, ScopedT ...
# (スコア:2603)
Synonym Familiesの別の良くある例はこんな感じのもの。 class Mul a b where type Result a b (*) :: a -> b -> Result a b instance Mul Int Int where type Result Int Int = Int (*) = (Prelude.*) instance Mul Int Double where type Result Int Double = Double (*) x y = fromIntegral Prelude.* y これ ...
# (スコア:2494)
Maybeの中の値を元に、Maybe自体をNothingにしたいケースが結構あります。例えば、Maybe Stringで中の文字列が空の場合にはNothingにしたいケースなどです。 nonEmptyString :: Maybe String -> Maybe String nonEmptyString s = case s of Just s | s /= "" -> Just s _ -> Nothing これを少し一般化すると、こ ...
# (スコア:2462)
# (スコア:10000)