は、私は次のようstripPrefixBy
機能を実装したいです。 stripPrefixBy
のタイプを実装したいのですがどうすればいいですか?高いランク付けimpredicative種類
15
A
答えて
20
あなたの署名の問題はstripPrefixBy
に渡されたリストには、引数として特定を取る関数のリストとして宣言した後、任意のB発信者ピックのためMaybe b
を生産していることです。リスト内の関数が返される唯一の値は⊥
,Nothing
およびJust ⊥
です。
forall
はコンストラクタの種類に適用されます。impredicative多型を使用した場合、forall
は、それが存在量化タイプでない同じことを意味しない、と言うことです data MyType = forall a. Foo a
Foo :: forall a. a -> MyType
しかし、ここでは、その機能は文字通りタイプforall b. a -> Maybe b
でなければならないと言っています。なぜあなたはそれをしたいです」、
stripPrefixBy :: [exists b. a -> Maybe b] -> [a] -> Maybe [a]
5
別の応答があると、私はUHCはあなたが直接欲しい種類を表すサポートしていることを信じてい
{-# LANGUAGE ExistentialQuantification #-}
data Pred a = forall b. Pred (a -> Maybe b)
stripPrefixBy :: [Pred a] -> [a] -> Maybe [a]
stripPrefixBy [] xs = Just xs
stripPrefixBy _ [] = Nothing
stripPrefixBy (Pred p:ps) (x:xs) = case p x of
Just _ -> stripPrefixBy ps xs
Nothing -> Nothing
res :: Maybe String
res = stripPrefixBy [Pred $ const (Just 0), Pred Just] "abc"
wantThisToBeTrue :: Bool
wantThisToBeTrue = case res of
Just "c" -> True
_ -> False
:ここ
は実存タイプを使用して補正例ですそのタイプを持っているのですか? "あなたはすべて同じ結果型を持つ関数の一覧(stripPrefixByの最初の引数)を制約するために満足している場合は、例えばres :: Maybe String
res = stripPrefixBy [const (Just undefined), Just] "abc"
を使用して、stripPrefixByに、次のHaskell98タイプ与えることができます:
stripPrefixBy :: [a -> Maybe b] -> [a] -> Maybe [a]
を
等価的に、あなたはあなたにも述語のリストを持っているかもしれないので、最初の引数の関数の結果は、(他に何もタイプ「b」を言及していない)を使用することができないことを観察することができた:
stripPrefixBy :: [a -> Bool] -> [a] -> Maybe [a]
stripPrefixBy [] xs = Just xs
stripPrefixBy _ [] = Nothing
stripPrefixBy (p:ps) (x:xs) = case p x of
True -> stripPrefixBy ps xs
False -> Nothing
res :: Maybe String
res = stripPrefixBy (map (isJust.) [const (Just undefined), Just]) "abc"
isJust :: Maybe a -> Bool
isJust (Just _) = True
isJust Nothing = False
しかし、おそらくこの質問はあなたが持っているより複雑な問題の抽象化であり、より簡単な応答はうまくいかないでしょうか?すべてができるだけシンプルであるべきですが、単純ではありません。
関連する問題
- 1. Python-Configurationファイルの種類を取得してランク付けしますか?
- 2. ランク3種類は、私はこのランク3種類の関数定義を持っている例
- 3. ジュリア - 高調種類
- 4. より高い種類の関数?
- 5. Retrieveをランク付けして
- 6. Matlabプログラミング、マトリックスソート、ランク付け
- 7. テラデータのランク付け方法
- 8. テキストファイルのランク付けのメトリクス
- 9. 添付ファイルの種類を1つだけ保存する
- 10. SQLで最も高い「ランク付け」を持つデータのみを結合する
- 11. ミリ秒または日付の種類?
- 12. Typescriptの日付の種類は?
- 13. (.net)デザインの種類の種類
- 14. Enumの種類Enumの種類
- 15. 種類
- 16. 種類
- 17. 種類
- 18. 種類
- 19. 2種類の配列を掛ける
- 20. ランク付けして一番近いポイントを見つける
- 21. SOQL日付の比較式(日付)の日付の種類
- 22. パンダの複数列のランク付け
- 23. Excelランク付けネクタイの援助
- 24. ハッカーのランク付け部分提出
- 25. postgresクエリのランク付け方法
- 26. マイ・ランク付けシステムphp sql help me
- 27. ランク付けされたクイズ回答順
- 28. 星ランク付けプラグインをjqgridに統合
- 29. スワイプでのランク付けのループ
- 30. クラスターサイズの取得とランク付け
関連するq/a:http://stackoverflow.com/questions/19982295/practical-implications-of-runst-vs-unsafeperformio – crockeea