2016-10-30 11 views
3

私はこのプログラムに問題があります。何もフィルタリングしていないと解凍するだけ

filterJust :: [Maybe a] -> [a] 

filterJust [] = [] 
filterJust x = map fromJust (filter (isJust) x) 

が、GHCiのは、この

but ghci keeps reporting this

EDIT報告し続け:

私は私が作ったので、追加のモジュールを使用したくない

この:

filterJust :: [Maybe a] -> [a] 

filterJust x = map unpack (filter (Nothing /=) x) 

unpack (Just a) = a 

とを私はこのメッセージを受け取る

and i get this message

なぜか分かりません。私は何かをインポートすることなくEq関数を使用できるはずですか?

+3

'fromJust'と' inJust'はPreludeではなく、Data.Maybeに存在します。あなたはモジュール 'import Data.Maybe(fromJust、isJust)'( 'fromJust'と' inJust'をグローバルスコープにインポートする)や 'import Data.Maybe'(' Dataからすべてをインポートします。多分グローバルスコープに)。また、同じエラーで6つのコンパイルラウンドのスクリーンショットを撮るのではなく、あるコンパイルラウンドのエラーのテキストを質問にコピーしてください。 –

+0

なぜ 'filterJust [] = []'が必要ですか? –

+0

ありがとうRhymoid。 Imばかばかしいとtoughtそれは実際にプレリュードにあります –

答えて

-3

fromJustisJustData.Maybeにあり、いないこのようなPrelude

何かがあなたがfilterJust関数を記述する必要はありません

import Data.Maybe (fromJust) 
maybe2list x = if x == Nothing then [] else [fromJust x] 
filterJust lst = lst >>= maybe2list 
+1

投票者が落ち込んでいると、コメントははるかに建設的なものになる –

+1

1)これはOPの問題の半分しか解決しません。なぜなら、彼らは 'isJust'がどこにないか分からないからです。 2)OPが初心者ではないにもかかわらず、このバージョンはOPのバージョンと比較して判読不能であり、実証済みまたは関連するパフォーマンス上の利点はありません。 3)OPは、トップレベル関数の型を正しく宣言する。あなたのタイプはどこですか?これは、Haskellのプログラマを始めるための悪い例を設定します。 –

+0

私は、作業コードがダウン投票すべきではないと思います。何らかの理由で、 'SO'の' haskell'が反対しているように見えますが、私と他の人たちが 'haskell'コミュニティに私の時間を寄付するのをやめます。 –

11

を動作するはずですので、あなたは、importが欠落しています。それはbaseにすでにあり、それはcatMaybesと呼ばれて:だからあなたがする必要があるすべては自分のモジュールにimport Data.Maybe (catMaybes)を追加している

catMaybes :: [Maybe a] -> [a] 
catMaybes ls = [x | Just x <- ls] 

http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Maybe.html#v:catMaybes

また、この関数を定義するためのより良い方法を見ることができます。

3
    /=
  • のみEq(/=) :: (Eq a) -> a -> a -> Bool)を実装タイプの値を使用することができます。
  • Maybe aEqaの場合のみ(instance (Eq a) => Eq (Maybe a))です。
  • あなたの型シグネチャは、すべてのタイプaためfilterJust作品、でもそれらEqを実装していないということを述べている:[Maybe a] -> [a]

したがってfilterJust/=を使用することはできません。

関連する問題