Anatolii
И в него за импортить эти два
Anatolii
А потом этот модуль уже за импортить туда где ты хочешь им воспользоваться
blkmrkt
Написать функцию которая к id обращается
Ambiguous occurrence ‘id’ It could refer to either the field ‘id’, defined at src/VKAPI.hs:118:3 or the field ‘id’, defined at src/VKAPI.hs:93:3
blkmrkt
в этом коде
Anatolii
Та беда
Anatolii
Я даже не знаю что сказать
blkmrkt
все норм работало пока не понадобилось работать с более чем 1 типом данных из JSON, в котором есть поле id...
Нурлан
ну вот такой код, t тут будет конкретным инстансом я так думаю
может я конечно не о том, не понимаю, у вас там id переопределен, по синтаксису это должна быть функция, (id t) функция которая действует справа на строку, вы уверены в определении самой функции?
Anatolii
А почему print а не printf
Anatolii
?
blkmrkt
А почему print а не printf
а уже на printf заменил, не вижу особо разницы
Anatolii
Ну ок
blkmrkt
putStr тож работает 🙃
Anatolii
Даже не знаю что сказать
Anatolii
У меня точно работало
Нурлан
так типы не сходятся
Anatolii
?
Нурлан
я не знаю какой тип у printf, но print :: Show a => a -> IO ()
Anatolii
Он же там выше явно тип указал
Anatolii
А, про это
Anatolii
Ну уже ж заменил
Anatolii
А ам выше явно указал Maybe wall
blkmrkt
а нельзя как-нибудь вручную указать тип, id которого я имею ввиду?
вот так пробовал указывать вручную тип, но может неправильно делал
Нурлан
все равно после $ все будет вычисляться, а там стоит выражение типа СТРОКА ЧИСЛО
Anatolii
А проекта нету где-то на гитхабе?
blkmrkt
не сорян
Anatolii
Ну доллар с принтф реально убрать можно
Anatolii
Но ошибка наверное другая бы была
blkmrkt
уже убрал, но оно не влияет ни на что наверное
blkmrkt
мож какая прагма делает не то что нужно?
Нурлан
попробуй скобки убрать
Нурлан
вместе с внутренностями
Нурлан
в качестве теста (а то как сарказм выглядит)
Anatolii
Пословиц для этого прагма не нужна
Anatolii
Оно по дэфолту включено
_______bx
а п
blkmrkt
я в принципе уже готов продолжить писать код, только не обращаясь к этим всем внутренностям моих типов 😂
_______bx
а printf он откуда
_______bx
data Wt = Wt {id :: Int} wt = Just Wt {id = 1} case wt of Just x -> id x Nothing -> 0
_______bx
так работает
blkmrkt
Text.Printf
blkmrkt
data Wt = Wt {id :: Int} wt = Just Wt {id = 1} case wt of Just x -> id x Nothing -> 0
только у меня вот такая ситуация: data Zt = Zt {id :: Int} data Wt = Wt {id :: Int} wt = Just Wt {id = 1} case wt of Just x -> id x Nothing -> 0
blkmrkt
Вот это не соберется из-за ambiguous occurence test {-# LANGUAGE DuplicateRecordFields #-} data A = A { test :: String } deriving Show data B = B { test :: String } deriving Show testme = putStrLn $ test (A 32)
Нурлан
попробуй вместо id лямбда функцию запихнуть, может компилятор просто не понимает какой туда тип подставляется
Нурлан
(\(Wt i) -> i)
blkmrkt
то же самое(
Нурлан
без id
Нурлан
(\(Wt i) -> i)
вот так
blkmrkt
вот так
сорри я нуб: ` Not in scope: data constructor ‘Wt’ Perhaps you meant variable ‘t’ (line 106)`
Нурлан
у t какой тип сейчас
Нурлан
можешь сказать?
blkmrkt
WallTask
blkmrkt
data WallTask = WallTask { id :: Int } deriving (Show, Generic)
Нурлан
значит вместо этой скобки попробуй $ (\(WallTask i) -> i) t
blkmrkt
хммммммм. Ошибка пропала, на этой строчке все теперь ок. Только теперь оно будет принтить саму структуру похоже
Нурлан
ошибка была, видимо, из-за того, что компилятор не понимал id из какого контретно типа применять
blkmrkt
только как теперь id то достать
Нурлан
ничего не поделаешь, теперь t может быть только определенного типа всегда, ну по другому и быть не может вообще
Нурлан
еще можно вместо того что добавил попробовать id (t :: WallTask)
Нурлан
только как теперь id то достать
та лямбда-функция что в скобках достает твое id
blkmrkt
делал раньше вот так: Just t -> printf "[+] Parsing wall %d\n" id (t :: WallTask) а нужно было вот так: Just t -> printf "[+] Parsing wall %d\n" $ id (t :: WallTask)
Нурлан
=)
blkmrkt
мдауш, ну спасибо, у меня нет слов
Нурлан
спасиб канеш
Нурлан
но ты первый чел кому с хаскелем помог!!! 😂
blkmrkt
хехех
blkmrkt
хмм, а вот тут идентичный трюк уже не работает. Боюсь что и в предыдущем шагу та же проблема, просто компилятор еще до туда не дособирал
blkmrkt
ровно то же самое - ambiguous occurence id
_______bx
проще всего id переименовать
_______bx
если можно
blkmrkt
неа, это из жсона приходит от внешнего апи. не хотелось бы вручную сериализаторы писать под каждый мелкий тип
blkmrkt
да и идти по легкому пути не охота 😂
Нурлан
если ты о строке 147, то надо t с объявлением типа в скобки взять
_______bx
ну а добавить функцию которая берет id
Нурлан
а вообще я думаю, когда писал функцию decode не указывал ее полный тип