HASKELL - Изменить тип

Мне нужно создать функцию f:: Log->[String] это делает это (((o, i ,d),s) = [(o, i ,d)]

type Log = (Plate, [String])

type Plate = (Pin, Pin, Pin)type Pin = (Char, Int)

4 ответа

Решение
g :: Log -> [String]
g (plate, _) = [show plate]

Если вы находитесь на такой странице, нажмите "Источник" на правой стороне рядом с функцией, которая вас интересует.

Если вам нужно найти функцию, Hayoo! и Google свяжет вас со страницами документации, подобными приведенным выше.

Важно отметить, что show не имеет одного определения. show это функция, определенная для всех типов данных в Show (с большой буквы "S") Например, вот полный исходный код класса типов Show. Show определяется в классе типов как просто show :: a -> String, Но если вы будете искать "экземпляр Show Bool" или "экземпляр Show Int", вы найдете конкретные определения.


Для второй части вашего вопроса, самый простой способ получить show Функция для нового типа состоит в том, чтобы просто написать deriving (Show) под этим. Например,

data Foo = Foo Int Int
   deriving (Show)

Теперь я могу использовать show на данных с типом Foo,

Используйте Google, чтобы найти такую ​​информацию.

Пример: http://www.haskell.org/hoogle/?hoogle=show

Как только вы нашли нужную функцию в списке, нажмите и там вы найдете Source ссылка в правой части страницы.

NB это ответ на оригинальный вопрос:

Где я могу увидеть коды предопределенных функций в haskell?? В основном функция ШОУ?

Это правда, что вы можете использовать Hoogle для поиска функций, определенных в Prelude (и других модулях), но сам исходный код находится в Hackage.

Hackage - это база данных пакетов Haskell. Вы можете загрузить новые пакеты из него, а также просмотреть документацию Haddock для каждого пакета в базе данных.

Это страница Haddock для стандартной прелюдии. Он документирует классы типов, типы данных, типы и функции верхнего уровня, экспортируемые модулем Prelude. Справа от каждого определения заголовка находится ссылка с надписью "Источник". Вы можете нажать эту кнопку, чтобы перейти к онлайн-копии исходного кода модуля, который вы просматриваете.


При предварительном просмотре вы теперь задаете совершенно другой вопрос, а при предварительном просмотре фактически исходный вопрос был отредактирован из этого поста.

Ваш новый вопрос неясен, но это решение будет работать для получения результата в вашем примере.

> [fst ((('O',0),('I',0),('D',1)),"O->D")]
[(('O',0),('I',0),('D',1))]

Я думаю, что вы используете нотацию списка вместо двойных кавычек для идентификации Strings, кстати, так что я исправил это вокруг 0->D выше. Так что вы можете попробовать это вместо этого.

> show (fst ((('O',0),('I',0),('D',1)),"O->D"))
"(('O',0),('I',0),('D',1))"

Это работает, потому что у вас есть только определенные синонимы типа (используя type в ваших декларациях вместо data) на структурах данных, которые уже имеют Show экземпляров.

Другие вопросы по тегам