Другой вариант - дефис , который можно найти здесь .Базовое использование выглядит примерно так:
>>> import hyphen, hs.Prelude
>>> hs.Prelude.sum([1,2,3]) # list converted to Haskell list
6
>>> hs.Prelude.drop(5, "Hello, world")
", world"
>>> hs.Prelude.drop(1, [1,2,3])
<hs.GHC.Types.[] object of Haskell type [GHC.Integer.Integer], containing '[2,3]'>
>>> list(hs.Prelude.drop(1, [1,2,3])) # Convert back to Python list
[2, 3]
Это кажется менее легким решением, чем некоторые другие варианты в других ответах.
В обмен на дополнительный вес вы, кажется, получаетеполный мост от Хаскелла до Питона.Тогда как HaPy
и github.com/nh2/call-haskell-from-anything
позволяют вам использовать функцию Haskell из Python только в том случае, если эта функция Haskell имеет все свои аргументы от довольно базовых типов и возвращает довольно базовый тип, hyphen
, кажется, позволяет использовать произвольный функций.Он может сделать это, потому что он вводит в python тип, представляющий произвольный объект в куче Haskell.
Эти 'объекты haskell, рассматриваемые из python', ведут себя довольно хорошо как объекты python.Например, Haskell Map
ведут себя немного как словари:
>>> import hs.Data.Map
>>> my_map = hs.Data.Map.fromList([(1, 'Hello'), (2, 'World')])
>>> my_map[1]
'Hello'
>>> print(sorted([key for key in my_map]))
[1, 2]
См. В файле readme еще много примеров!
Кажется также, что он обрабатывает различные необычные вещи, такие как преобразование исключений между Haskell иPython.