Czy w Haskell można zdefiniować typ danych w zakresie funkcji? Na przykład piszę funkcję f :: [(Char, Int)] -> [(Char, String)]
. W implementacji funkcji zbuduję drzewo z listy wejściowej, a następnie przetestuję drzewo, aby zbudować listę wyjściową. Jednym z rozwiązań jest zdefiniowanie nowego typu danych Drzewa specyficznego dla mojego problemu, wraz z dwiema funkcjami pomocniczymi, jedną do przetłumaczenia listy wejściowej do drzewa i drugiej, aby przejść drzewo i zbudować listę wyjściową.Haskell: Definiowanie nowego typu danych z zakresem funkcji
Teraz dwie funkcje pomocnicze można łatwo przeciągnąć do zakresu f
, umieszczając je w klauzuli where, ale co z drzewem tymczasowym typu nonce? Brudny wydaje się obszar nazw, definiując go poza zakresem funkcji, ale nie wiem, jak to zrobić.
Dla kontekstu, okazuje się, że obliczam kodowanie Huffmana. Nie jestem szczególnie zainteresowany znalezieniem alternatywnego algorytmu w tym punkcie, ponieważ podejrzewam, że często będzie użyteczne w Haskell, aby zdefiniować typy danych pomocniczych między funkcjami pomocniczymi, więc jestem zainteresowany ogólnymi podejściami do tego.
Wszystkie deklaracje typów danych muszą znajdować się na najwyższym poziomie. Jeśli nie chcesz zanieczyszczać przestrzeni nazw, po prostu nie eksportuj typu danych. – user2407038
[This] (http://stackoverflow.com/questions/15320391/proposal-for-local-data-declarations- instance) mogą być odpowiednie. – is7s