[Haskell-ELTE] Funkcionalis fuggosegek

Peter Divianszky divip at aszt.inf.elte.hu
2010. Május. 13., Cs, 21:51:38 CEST


Sziasztok!

Szerintem a következő a hiba a kódban:

 > instance (...) => Divides (Succ q) (Succ p) False
 > instance (...) => Divides (Succ q) (Succ p) b

Ilyen úgy tűnik nem szabad csinálni, még akkor sem ha a (...) részen 
egymást kizáró esetek vannak.
Viszont egy kis trükközéssel megoldható.
Kell definiálni egy segéd Divides' osztályt, aminek eggyel több 
paramétere van, ahol megkapja azt hogy a két szám hogy viszonyul 
egymáshoz. Nem akarom hosszan magyarázni, inkább elküldöm a kódot.
Funkcionális függőségek helyett típusfüggvényeket használok mert azokat 
részesítem előnyben, de ugyanez a trükk használható funkc. függőségekkel 
is (én is lestem másoktól...).

Üdv,
Péter

2010-05-08 12:20 keltezéssel, Dr. ERDI Gergo írta:
> Hi,
>
> Adott az alabbi ket tipusosztaly es peldanyaik:
>
> class Lt x y b | x y -> b where
> _lt :: x -> y -> b
> instance Lt Zero (Succ n) True
> instance Lt n Zero False
> instance (Lt x y b) => Lt (Succ x) (Succ y) b
>
>
> class Divides q p b | q p -> b where
> _divides :: q -> p -> b
> instance Divides (Succ q) Zero True
> instance (Lt (Succ p) (Succ q) True) => Divides (Succ q) (Succ p) False
> instance (Lt q (Succ p) True, Sub (Succ p) (Succ q) p', Divides (Succ q)
> p' b) => Divides (Succ q) (Succ p) b
>
> es adott az alabbi modon definialt "2":
>
> type N2 = Succ (Succ Zero)
> n2 = undefined :: N2
>
> Kerdesem, hogy mit jelent az alabbi hibauzenet, ha a _divides n2 n2
> tipusat akarom meghataroztatni a GHC-vel:
>
> *Main> :t _divides n2 n2
>
> Top level:
> Couldn't match expected type `True' against inferred type `False'
> When using functional dependencies to combine
> Lt n Zero False,
> arising from the dependency `x y -> b'
> in the instance declaration at TypeProg.hs:63:9
> Lt Zero Zero True,
> arising from a use of `_divides' at <interactive>:1:0-13
>
> ?
>
> Kosz,
> Cactus
--------- következő rész ---------
A non-text attachment was scrubbed...
Name: X20.hs
Type: text/x-haskell
Size: 1273 bytes
Desc: X20.hs
URL: <https://plc.inf.elte.hu/pipermail/haskell/attachments/20100513/12c7a49d/attachment.hs>


More information about the Haskell mailing list