arity :: a -> Integer
任意の関数のアリティを決定する関数を書くことは可能でしょうか?
> arity map
2
> arity foldr
3
> arity id
1
> arity "hello"
0
?
ベストアンサー1
はい、非常に簡単に実行できます。
arity :: (a -> b) -> Int
arity = const 1
理由: 関数の場合、正確に 1 つの引数に適用できます。Haskell 構文では、 はf a b
実際には であるため、 0、2、またはそれ以上の引数に適用できないことに注意してください。つまり(f a) b
、 ではなく です。もちろん、結果は、再度適用できる別の関数になる可能性があり、以下同様です。f applied to a and b
(f applied to a) applied to b
馬鹿げているように聞こえるかもしれないが、それは真実に他ならない。