Просто и точка в winghci
Почему это работает...
Just.(+3) $ 6.7
Just $ truncate 8.9
... но не это?
Just.truncate $ 8.9
Я попытался разрешить усечение до простого Double -> Int:
let f :: Double -> Int; f = (\ x -> truncate x);
... но это не проблема...
Just.f $ 5.6
<interactive>:41:1:
Failed to load interface for `Just'
Use -v to see a list of the files searched for.
Большое спасибо!
2 ответа
Когда вы хотите сочинять функции, лучше написать f . g
чем f.g
, Это немного более читабельно, и вы избежите кучу таких проблем, как эта.
Когда у вас есть что-то в форме Foo.bar
или же Foo.Bar
в Haskell он анализируется как квалифицированное имя. Вот почему Just.f
не работает: Just
не является модулем, поэтому "интерфейс" для Just
не может быть загружен.
Зачем Just.(+3)
работает как задумано: (+3)
является правильным разделом, а не идентификатором, поэтому точка не может быть частью определенного имени. Единственный способ интерпретировать это - предположить, что .
это инфиксное приложение оператора (.)
так должно быть Just . (+3)
,
Точка между заглавными и другими идентификаторами анализируется как квалифицированное имя (например, Data.Map.insert
), поэтому ошибка говорит вам, что он не может найти модуль с именем Just
, Вы можете просто добавить пробелы вокруг точки, чтобы это исправить.