Tło: Nie rozumiem ~ i żądam użycia przypadku.Zrozumienie `~` z 2 funkcjami
Dane:
{-# LANGUAGE GADTs #-}
f :: a ~ b => a -> b -> b
f a b = a
g :: a -> a -> a
g a b = a
Wydaje mi się, że obie funkcje są równe:
Prelude> :r
[1 of 1] Compiling Main (TypeEq.hs, interpreted)
Ok, modules loaded: Main.
*Main> f 10 20
10
*Main> g 10 20
10
W jakich okolicznościach byłoby użyć f
nad g
?
Należy podkreślić, że nie jest korzystne w takim przypadku: te funkcje są równe. Potrzebujesz czegoś takiego jak rodziny typów lub GADT, żeby zobaczyć jakieś przydatne rzeczy, jak sądzę. A może $ Data.Typeable.eqT $ może być dobrym przykładem. – chi
Jeśli zastanawiasz się, w jaki sposób można go używać w bardzo pomocny sposób, przeczytaj ten świetny wpis na blogu od Chris Done: http://chrisdone.com/posts/haskell-constraint-trick – Shersh