私はhaskellを初めて使っています。このタイプのシグネチャと呼ばれるものについていくつか読んでいますが、理解できないことがいくつかあります。ここでHaskellタイプシグネチャ
はコードがで探していますされています。だから、
--mult applies product
mult :: Num a => [a] -> a
mult = foldr (*) 1
--posList filters positive numbers out
posList :: (Ord a, Num a) => [a] -> [a]
posList = filter (>0)
--trueList determines whether all of the members of a list are T or not
trueList :: [Bool] -> Bool
trueList = foldr(&&) True
--evenList determines where all of the members of a list are even or not
evenList :: (Integral a, Foldable t) => t a -> Bool
evenList x = if (((foldr (+) 2 x) `mod` 2) == 0) then True else False
、私はあなたが別の方法で簡単にこれらの機能を行うことができます知っているが、私は高階関数map
、filter
とfoldr
を使用するための割り当てを持っていました私はそのようにしなければなりませんでした。とにかく、私はそれらを書いた人であるので、機能の仕組みを理解しています。それらの用語は理解できません。Integral
、Foldable
、どういう意味ですか?彼らはハスケルの面で何と呼ばれていますか?
あなたは 'evenList'をテストしましたか? 'evenList [1,3]'を試してみることをお勧めします。 – chi
IntegralとFoldableは、このタイプのクラス*、googleです。基本的に「Foldable」は「tはリストのようなタイプ」を意味します。 –
タイプクラスは、Haskellでオーバーロードがどのように行われるかです。型は、いくつかの関数を実装することによって型クラスを実装します。例えば、 '(+)'の型は 'Num a => a - > a - > a'なので、私が追加したい型' Foo'を定義するなら、 '(+ ):: Foo - > Foo - > Foo '' Foo'を使って 'Num'クラスをインスタンス化することでしかできません –