:sweat_smile: HaskellDayのハッシュタグが被ってしまったか。。。まぁ、Haskellってもともと人の名前だし、しょうがないか。。。
https://twitter.com/USIndianAffairs/status/1041702224534138881
https://twitter.com/USIndianAffairs/status/1041702224534138881
The school was named after Dudley C. Haskell, a member of the U.S. House of Representatives from the 2nd district of Kansas.
#Haskell なのも他の Haskellさんと被りがち。fmap と ap を用いることで、任意個の引数を持つ関数と任意個のFunctorに対して、以下のような計算が行えるかと思います:(*) <$> Just 1 <*> Just 2 => Just 2
(*) <$> (1, 1) <*> (2, 2) => (1, 2) となることを期待
:t ((*) <$>) ((*) <$>) :: (Num a, Functor f) => f a -> f (a -> a) :t ((*) <$> (1,1)) ((*) <$> (1,1)) :: (Num t, Num a) => (t, a -> a) :t ((*) <$> (1,1) <*>) ((*) <$> (1,1) <*>) :: (Num t, Num b, Monoid t) => (t, b) -> (t, b) :t ((*) <$> (1,1) <*> (2,2)) ((*) <$> (1,1) <*> (2,2)) :: (Num t, Num b, Monoid t) => (t, b)
ap を適用した時点で第一要素にMonoidの型制約が入っており、これがエラーの原因かと考えています。ap を適用した時点でMonoidの型制約が入るのでしょうか?これは、TupleがApplicativeのインスタンスとして何か特殊化されているためなのでしょうか?Monoid t => Applicative ((,) t)(u, f) <*> (v, x) = (u <> v, f x) というApplicativeインスタンスの宣言(一部抜粋)がなされてたので、タプルの左側の型の <> の仕方わかんないんだけど(怒り) と言われてるのだと思います。(*) <$> (1, 1) <*> (2, 2) => (1, 2) となることを期待
(1, 2) はどういう計算結果ですか。第一要素を活かしてApplicativeとしての連鎖を許すなら、第一要素はMonoidとして連結していく方が自然かつ有用ということなんですかねというのは正しいのですが,
(*) <$> (1, 1) <*> (2, 2) -- => (1, 2)
pure 2 :: (Int, Int) -- => (?, 2)
(*) <$> (First (Just 1), 1) <*> (First (Just 2), 2) == (First (Just 1), 1 * 2)
pure が実装できないというのはすごく納得です!ありがとうございます :slightly_smiling_face:Language.Haskell.TH.Syntax の addDependentFile をStackで使ってたら package.yaml の extra-source-files に該当ファイルを書いておかないと検知してくれないという罠にかかりましたnewtype Accy o a = Acc { acc :: o } に対して、 a を無視しない適切な構成を考えると2-Tuple Applicativeの実装になるかなと)Day (a,) (b,) x = forall p q. Day (a, p) (b, q) (p -> q -> x) <-> ((a, b) (forall p q. (p, q, p -> q -> x)) <-> ((a, b), x)
(a, b) に対応する対象になります。つまり、圏同値によって(,)はDay convolution(の同型)に対応します。Day (a,) (b,) x を ((a,b), x) にマップする関数を以下のように定義しておきます。iso2 :: Day (a,) (b,) x -> ((a, b), x) iso2 (Day (a, p) (b, q) f) = ((a, b), f p q)
Data.Word8 使うべきなのかもしれませんねOverloadedStrings 使ってるときも同じ理由で良くハマるんですよね... :disappointed:ByteString に Arbitary のインスタンスを作っていてくれればこんなことには……[Word8] から簡単に作れちゃう、というのもありますし)