deniok: (Рыжий)
[personal profile] deniok
Маленький хаскеллист попал в Зазеркалье и, преодолев неисчислимые препятствия, дошел до последней горизонтали. Белая и Черная Королевы говорят, что для того, чтобы стать SPJ, ему нужно пройти «Королевский экзамен», ответив на Черный и Белый вопросы: всякий ли Functor является Rotcnuf? всякий ли Rotcnuf является Functor?
class Rotcnuf f where
  mfap :: f (a -> b) -> a -> f b

Помогите маленькому хаскеллисту стать SPJ.

Date: 2016-01-16 10:41 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
синтакс еггог же. :: пропущено

Date: 2016-01-16 10:44 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Да, спасибо, сейчас поправлю.

Date: 2016-01-16 11:12 pm (UTC)
From: [identity profile] voidex.livejournal.com
Видимо два раза да

Date: 2016-01-16 11:22 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну там бы пруф предоставить. скажем, в первому понятно, а ко второму?

Date: 2016-01-17 08:00 am (UTC)
From: [identity profile] voidex.livejournal.com
Не, я ошибся, просто типы сошлись, но я вчера не подумал

Date: 2016-01-16 11:28 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
1. mfap ff x = fmap ($ x) ff -- так что, первое "да"

2. mfap не предлагает гарантий сохранения алгебраической структуры, так что, fmap нельзя выразить

Date: 2016-01-17 02:43 am (UTC)
From: [identity profile] migmit.livejournal.com
newtype F a = F (a -> Void)
instance Rotcnuf F where mfap (F abv) _ = F (\b -> abv (const b))

Date: 2016-02-07 06:43 pm (UTC)
From: (Anonymous)

{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}

class Rotcnuf f where
    mfap :: f (a -> b) -> a -> f b

instance Functor f => Rotcnuf f where
    mfap = flip (fmap . flip ($))


=> Любой Rotcnuf это Functor. Но не наоборот. fmap никак не выразить через mfap - у тебя есть объект типа f a, а в mfap нужно подать f (a -> b).

Date: 2016-02-07 10:37 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Только ровно наоборот: любой Functor это Rotcnuf. По fmap мы, как верно замечено, можем универсально построить mfap, это и обеспечивает дефолтный инстанс Rotcnuf для любого функтора. А пример Rotcnuf'а, не являющегося функтором, [livejournal.com profile] migmit в предыдущем комменте привел.

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 03:30 pm
Powered by Dreamwidth Studios