Replies (11)

  • @qnikst, А бесконечный тип в хаскеле, это как?
  • @segfault, :t inf
    inf :: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[segmentation fault
  • @trapdoor, Но как такое написать на хаскеле в это вселешке?
  • @segfault, А ... или в этом и соль?
  • @segfault, если я понимаю, то все рекурсивные типы, например. Хотя на самом деле мне тут нужно пирса в зубы. вывод в /0 это сказанное spj в багтреккере, посмотрим ещё, что goldfire по тому поводу расскажет.

    у меня 1. instance Foo m (S s m) where 2. instance Foo m1 m2

    и type family FooT m1 m2 :: Bool where
    m (S s m) = False
    m m = True

    в инстансах выбирается 2ой, а в семействах типов — первый нет.
  • @qnikst, Не распарсил. В семействах для m (S s m) таки срабатывает первый клоз?
  • @segfault, Да частенько проскакивает само: stackoverflow.com
  • @qnikst, Рекурсивные и даже взаимно-рекурсивные вовсе не бесконечные. Они в каждый момент интерпретации конечные. А вот infinite даже на время нельзя построить — как не можешь ты их представить, так и у компилятора с этим проблемы.
  • @trapdoor, Странно, почему указанный выше кейс считается именно бесконечным типом, а не просто ошибкой вывода типов, типа a /= [a] ?
  • @segfault, Няп, потому что полиморфные типы не сравниваются, алгоритм вывода пытается провести унификацию, но подходящей подстановки не существует.
  • @segfault, Потому что он не [a], а [[[[[[[[[....