YoshikuniJujo on Nostr: data Foo t where Foo :: a -> b -> Foo (a -> b) ...
data Foo t where
Foo :: a -> b -> Foo (a -> b)
みたいな型ってすこし不思議な感じがある。型の足し算と引き算の結果がおかしいような気がする。
Foo True 'c' :: Foo (Bool -> Char)
けど、たとえば
foo :: Foo (Bool -> Char) -> Bool -> Char
foo (Foo b0 c) b
| b == b0 = c
| otherwise = 'd'
みたいな関数を定義できるので、それほどおかしくもないのかもしれない。
a -> a -> bみたいな関数を使うことで、(+ 1)を(- 1)に変えることができる感じか。
Published at
2025-05-07 02:21:58Event JSON
{
"id": "11cca44f34ea054fbf0ecafa5da0a2b84572dac88f4b4d1dd61d8e667ba49af0",
"pubkey": "ef89ee45550f7377284d31e49fc57e5732ffc2b95a7bf35d0f1291d6fa278758",
"created_at": 1746584518,
"kind": 1,
"tags": [],
"content": "data Foo t where\n Foo :: a -\u003e b -\u003e Foo (a -\u003e b)\n\nみたいな型ってすこし不思議な感じがある。型の足し算と引き算の結果がおかしいような気がする。\n\nFoo True 'c' :: Foo (Bool -\u003e Char)\n\nけど、たとえば\n\nfoo :: Foo (Bool -\u003e Char) -\u003e Bool -\u003e Char\nfoo (Foo b0 c) b\n | b == b0 = c\n | otherwise = 'd'\n\nみたいな関数を定義できるので、それほどおかしくもないのかもしれない。\n\na -\u003e a -\u003e bみたいな関数を使うことで、(+ 1)を(- 1)に変えることができる感じか。",
"sig": "6147daed003bcd96ccd1c60c5f53c81e83005507aa3edbd37c1c94c9298d84c29fe0ca3d9475dbe057c612de6fdfae3c8a9db86bed0ea971c0a510bdce43d118"
}