与えられた:
data TwoInts = TwoInts Int Int
add'em :: TwoInts -> Int
add'em (TwoInts a b) = a+b
とをadd'em
名乗らなくても書けますか?何かのようなもの:a
b
add'em TwoInts = (+) -- (Note: Fails to type check)
与えられた:
data TwoInts = TwoInts Int Int
add'em :: TwoInts -> Int
add'em (TwoInts a b) = a+b
とをadd'em
名乗らなくても書けますか?何かのようなもの:a
b
add'em TwoInts = (+) -- (Note: Fails to type check)
タプルとの類推により、
data TwoInts = TwoInts { fst', snd' :: Int }
2 つの引数の関数をTwoInt
uncurry' f p = f (fst' p) (snd' p)
素敵な表記法を教えてください:
add'em = uncurry' (+)
一般的に言えば、それは不可能です。しかし、(特に newtype でよくある) アンラップとラップという実際的な問題を解決しようとしている場合、私はよくmapf f (Type val) = Type (f val)
fmap に似た関数を定義し、それをエクスポートしません。さらに関数を渡すだけで、n-ary データ型に対して同じことができます。実装が秘密であると想定されていない場合は、エクスポートすることもできます (単項の fmap として)。パターン マッチングによって実装に結び付けられるため、この種のマップ関数または複雑な型のビューのいずれかをお勧めします。
maybe
基本型には、やなどの関数がすでに定義されていますeither
。