169 похожих чатов

Вопрос я правильно понимаю что в коде newtype ArrowMap k

v = ArrowMap { getArrowMap :: k -> Maybe v }
getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задачу
https://stepik.org/lesson/7602/step/12?unit=1473
то есть все функции кажуться вырожденными, и не понятно что понимать например под delete key из ArrowMap

64 ответов

119 просмотров

getArrowMap :: ArrowMap k v -> k -> Maybe v

Стикер

Fedor- Автор вопроса

о, кстати, можно добавить свойство, что insert и delete не трогают другие ключи. если есть k1 /= k2, то значение по ключу k2 должно сохраняться при вставке k1 и при удалении k1

Fedor- Автор вопроса
Cheese Syrowiecki
о, кстати, можно добавить свойство, что insert и d...

и все это должно сохраняться в рамках Одной функции, хранящейся в типе ? я правильно понял ?

Fedor
и все это должно сохраняться в рамках Одной функци...

это свойство для всех словарей, для других реализаций тоже. через функцию или через список — не важно

Fedor
и все это должно сохраняться в рамках Одной функци...

а если ты справшиваешь про newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } то тут написано, что функция хранится в объекте, не в типе

Fedor- Автор вопроса
Cheese Syrowiecki
а если ты справшиваешь про newtype ArrowMap k v = ...

понял буду думать, как реализовать

Fedor- Автор вопроса
Cheese Syrowiecki
а если ты справшиваешь про newtype ArrowMap k v = ...

А для тестов, похоже нужно что то специальное ? поскольку не могу запустить аналогичный большой тест, сюда надо писать самостоятельно инстансе ? deriving не проходит к таким типам ?

Fedor
А для тестов, похоже нужно что то специальное ? по...

не понял вопрос. это какие-то несвязанные вещи. что к чему не подходит?

Fedor- Автор вопроса
Cheese Syrowiecki
не понял вопрос. это какие-то несвязанные вещи. чт...

написал тест аналогичный ListMap, он не запускается, вызов такой аналогично ListMap labelledExamplesResult $ (prop_Ar_func_ok @(Int, String) @(ArrowMap Int String)) функция теста, такая, на нее при таком вызове тоже ругается компилятор prop_Ar_func_ok :: (Show b, MapLike m, Ord a, Eq b) => (a, b) -> ArrowMap a b -> Property prop_Ar_func_ok (key,val) am = conjoin [ln,lj,d,i] where ln = lookup key (delete key am) === Nothing lj = lookup key (insert key val am) === Just val d = lookup key (delete key (insert key val am)) === lookup key (delete key am) i = lookup key (insert key val (delete key am)) === lookup key (insert key val am) все сделано по аналогии, но там был лист, а тут нет, подумал, что что то опять туплю с типами

Fedor- Автор вопроса

так вот такое работает, labelledExamplesResult $ (prop_all_ok @(Int, String) @(ListMap Int String)) потому и говорю, что не очень понимаю.... В случае инта, понял, там функция его ждала и ничего не надо, но в случае когда генерились листы, требовалось такое

Fedor- Автор вопроса

app/Trys.hs:20:3: error: [GHC-39999] • No instance for ‘QuickCheck-2.14.3:Test.QuickCheck.Arbitrary.CoArbitrary (ArrowMap Int String)’ arising from a use of ‘labelledExamplesResult’ app/Trys.hs:20:29: error: [GHC-39999] • No instance for ‘Ord (ArrowMap Int String)’ arising from a use of ‘prop_Ar_func_ok’ все это при убранном из prop_Ar_func_ok требовании MapLike m, из определения Типа функции

Fedor
так вот такое работает, labelledExamplesResult $ ...

надо в переменную типа подставлять тип. какие типы ты ожидаешь в a и b?

Fedor
app/Trys.hs:20:3: error: [GHC-39999] • No inst...

вот тут надо предыдущую ошибку исправить сначала

Fedor- Автор вопроса
Cheese Syrowiecki
надо в переменную типа подставлять тип. какие типы...

в а мне нужен (Int, String) - будет key val, а вот b ArrowMap параметризованная соотвественно Int String

Fedor- Автор вопроса
Cheese Syrowiecki
неправильно

Почему это было правильно для ListMap и не правильно для ArrowMap, именно этого я пока не могу понять

Fedor
в а мне нужен (Int, String) - будет key val, а вот...

ты не этого хочешь. ты хочешь (key, val) :: (Int, String), а чему равен а?

Fedor- Автор вопроса
Fedor
Почему это было правильно для ListMap и не правиль...

там тоже было неправильно, но ты написал основной код без ошибок, поэтому не увидел ошибку в тесте

Fedor
кортеж или я не понял вопрос

ты не понял типовые параметры

Fedor- Автор вопроса
Fedor- Автор вопроса
Cheese Syrowiecki
ты не понял типовые параметры

Наверняка, вопрос только как их правильно понимать

Fedor- Автор вопроса
Cheese Syrowiecki
там тоже было неправильно, но ты написал основной ...

То есть уже сейчас понятно, что я написал неверный код основной для ArrowMap?

Fedor
написал тест аналогичный ListMap, он не запускаетс...

тут у функции, описывающей свойство, 4 параметра: 2 типа и 2 значения. можешь их выписать?

Fedor- Автор вопроса
Cheese Syrowiecki
тут у функции, описывающей свойство, 4 параметра: ...

prop_all_ok :: ( Eq a, Ord a, Show a,Eq b, Show b) => (a,b) -> ListMap a b -> Property аргументы (a,b) (Listmap a b) типы (a,b) :: (Int, String) (Listmap Int String)

Fedor
prop_all_ok :: ( Eq a, Ord a, Show a,Eq b, Show b)...

до последней строчки всё ок, но в последней строке какая-то ерунда, тебе не кажется?

Fedor- Автор вопроса

Сдлелал теперь ошибки на отсуствие Eq и Show • No instance for ‘Eq (ArrowMap Int String)’ arising from a use of ‘prop_Ar_func_ok’

Cheese Syrowiecki
до последней строчки всё ок, но в последней строке...

ты хочешь (a, b) = (Int, String) ты хочешь ListMap a b = ListMap Int String значит, какие a и b ты хочешь?

Fedor
Сдлелал теперь ошибки на отсуствие Eq и Show ...

это всё ещё предыдущая ошибка в понимании типовых параметров

Fedor- Автор вопроса
Cheese Syrowiecki
до последней строчки всё ок, но в последней строке...

Пока нет, пока мне казалось, что типы, это типы Аргументов, в случае с ListMap - конструктор типа совпадает по названию с конструктором данных

Fedor- Автор вопроса
Fedor- Автор вопроса
Cheese Syrowiecki
ты хочешь (a, b) = (Int, String) ты хочешь ListMa...

ну чтоб проверить работу функций инстансе MapLike мне нужно получить пару key val и MapLike такой чтоб по типам совпали пара и мап

Fedor
Пока нет, пока мне казалось, что типы, это типы Ар...

лучше переименовать один из них, пока ты их путаешь data ListMap k v = LM [(k, v)] да и в будущем Хаскеле так будет правильнее

Fedor
ну чтоб проверить работу функций инстансе MapLike ...

это неправильный ответ на мой вопрос. вообще не ответ

Fedor- Автор вопроса
Fedor
тогда я не понимаю вопрос

посмотри в репле :type prop_all_ok @(Int, String)

Fedor- Автор вопроса

работало, потому что ты написал правильный код, не зависящий от глубины вложенности

Fedor- Автор вопроса

потому что первый типовой параметр — это а. а ты думал, что это тип первого аргумента-значения, который не а, а (a, b)

Fedor- Автор вопроса
Cheese Syrowiecki
потому что первый типовой параметр — это а. а ты д...

Понял.... labelledExamplesResult $ (prop_Ar_func_ok @Int @String) по идее правильный вызов ListMap так работает, Но тут я натыкаюсь на необходимость Show.... • No instance for ‘Show (ArrowMap String Int)’ arising from a use of ‘labelledExamplesResult’ И еще не понятно, почему в ошибке типы в другом порядке....

Fedor- Автор вопроса
Cheese Syrowiecki
потому что первый типовой параметр — это а. а ты д...

И вот такое не понятно ghci> :t prop_Ar_func_ok @Int @String prop_Ar_func_ok @Int @String :: String -> Int -> ArrowMap String Int -> Property ghci> :t prop_all_ok @Int @String prop_all_ok @Int @String :: Int -> String -> ListMap Int String -> Property функции написаны на мой взгляд аналогично, почему в Arrow меняется порядок типов не понятно

Fedor- Автор вопроса
Cheese Syrowiecki
а покажи весь код

полная копия файла https://play.haskell.org/saved/LActPhwY

Fedor- Автор вопроса
Cheese Syrowiecki
а покажи весь код

И еще вопрос, мне кажеться что тест, можно сделать на MapLike по идее так было бы правильно или нет ?

Fedor
И вот такое не понятно ghci> :t prop_Ar_func_ok @I...

потому что в сигнатуре сначала упоминается b, потом а. чтобы их расставить в правильном порядке, лучше явно написать forall a b.

Fedor
И еще вопрос, мне кажеться что тест, можно сделать...

только тебе Eq ArrowMap понадобится, а его нельзя написать в общем случае

Fedor- Автор вопроса
Cheese Syrowiecki
только тебе Eq ArrowMap понадобится, а его нельзя ...

И что в таком случае делать ? и аналогичный вопрос с Шоу,

Fedor
И что в таком случае делать ? и аналогичный вопрос...

ну, я бы написал Eq (ArrowMap Int8 v) и Show аналогичный, с полным перебором

Fedor- Автор вопроса
Cheese Syrowiecki
ну, я бы написал Eq (ArrowMap Int8 v) и Show анало...

Это все чтоб сделать тесты ? и почему Int8 а не например Bool ?

Fedor
Это все чтоб сделать тесты ? и почему Int8 а не на...

Bool недостаточно разнообразный. на Int8 больше вероятность поймать ошибку

Fedor
Это все чтоб сделать тесты ? и почему Int8 а не на...

ну, можно не писать тесты, это для самоуспокоения. лично я такие задачки с QuickCheck решаю

Fedor- Автор вопроса
Cheese Syrowiecki
ну, я бы написал Eq (ArrowMap Int8 v) и Show анало...

Про полный перебор не очень понял, я же вроде могу сделать тип ArrowMap Int8 String например и написать deriving Eq Show? или что то мешает ? Да не могу, для type не могу дерайвинг, для newtype вот так Multiple declarations of ‘ArrowMap’

Fedor- Автор вопроса

Да я понимаю, вторичное объявление конструктора данных.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта