rapture 20.07.2011 03:28 unknown

В haskell определение что делает функция по ее типу напоминает мне диагноз по юзерпику: для простых вещей вроде a → a все понятно, а для какой-нибудь поебени все-равно хуйпойми. Как понять что FilePath → IOMode → IO Handle — это функция, которая принимает путь и мод открытия и возвращает хэндл файла, а не возвращает хэндл И мод (например,посмотреть в каком режиме открыт файл, если на запись — ждем своей очереди)?
И еще пока идея чистых функций как-то не сильно прижилась. Где-то я недокурил тут, или просто не пролезает.

1. werehuman 20.07.2011 06:35

> Как понять что FilePath → IOMode → IO Handle — это функция, которая принимает путь и мод открытия и возвращает хэндл файла, а не возвращает хэндл И мод

Ты не поверишь. Считай, что ты одним разом написал две функции.
Одна принимает на вход путь файла и режим, возвращает хендлер.
Вторая принимает на вход только путь файла, а на выходе у неё — функция, которая принимает на вход режим и возвращает хендлер.
Если тебе нужен только первый вариант, то юзай скобки.
(FilePath → IOMode) → IO Handle

3. rapturewerehuman /1 20.07.2011 07:16 unknown

Хочешь сказать, что readFile может вернуть mod? /coolface

4. werehumanrapture /3 20.07.2011 07:28

readFile :: FilePath → IO String
Она может вернуть только IO String

5. rapturewerehuman /4 20.07.2011 07:33 unknown

Ну, openFile

6. werehumanrapture /5 20.07.2011 07:33 Psi+

<interactive>:1:0: Not in scope: `openFile'

7. rapturewerehuman /6 20.07.2011 07:34 unknown

Ну блеать, :m System.IO

9. rapturewerehuman /8 20.07.2011 07:45 unknown

И ты этим хотел сказать, что функция openFile, имеющая сигнатуру FilePath → IOMode → IO Handle, возвращает по FilePath _____IOMode____ и IO Handle? O_o

10. werehumanrapture /9 20.07.2011 07:46 Psi+

она возвращает (IOMode → IO Handle) в случае с openTmpText

11. rapturewerehuman /10 20.07.2011 07:48 unknown

Где? (или я совсем дурак, или кто-то меня нагло наебывает)

12. werehumanrapture /11 20.07.2011 07:48 Psi+

Prelude> :module System.IO
Prelude System.IO> :t openFile
openFile :: FilePath → IOMode → IO Handle
Prelude System.IO> let openTmpText = openFile "/tmp/text.txt"
Prelude System.IO> :t openTmpText
openTmpText :: IOMode → IO Handle

13. rapturewerehuman /12 20.07.2011 07:50 unknown

И по твоему, OpenTmpText возвращает IOMode? А не принимает ли?

14. werehumanrapture /13 20.07.2011 07:50 Psi+

ты читать умеешь?

15. werehumanrapture /13 20.07.2011 07:52

> она возвращает (IOMode → IO Handle) в случае с openTmpText
> > она возвращает (IOMode → IO Handle) в случае с openTmpText
> IOMode → IO Handle

16. rapturewerehuman /14 20.07.2011 07:52 unknown

Судя по сигнатуре:
openTmpText :: IOMode → IO Handle
Функция openTmpText ПРИНИМАЕТ IOMode и ВОЗВРАЩАЕТ handle. Нет?

17. werehumanrapture /16 20.07.2011 07:52 Psi+

да

18. rapturewerehuman /17 20.07.2011 07:54 unknown

> @werehuman@rapture:
> ты читать умеешь?
> она возвращает (IOMode → IO Handle) в случае с openTmpText
> Функция openTmpText ПРИНИМАЕТ IOMode и ВОЗВРАЩАЕТ handle. Нет?
> да
И кто тут читать не умеет?

19. werehumanrapture /18 20.07.2011 07:55 Psi+

ты не умеешь.
> > И ты этим хотел сказать, что функция openFile, имеющая сигнатуру FilePath → IOMode → IO Handle, возвращает по FilePath _____IOMode____ и IO Handle? O_o
> она возвращает (IOMode → IO Handle) в случае с openTmpText

20. rapturewerehuman /19 20.07.2011 08:00 unknown

Батенька, как она может возвращать IOMode,если ты, м***, прописал его в тексте программы (openTmpText WriteMode). Тебе нужно узнать по пути к файлу FilePath его хэндл и мод, под которым он открыт, а не открыть его с модом и получить хэндл.
::FilePath → (IOMode, IOHandle)
а не
::IOMode → IOHandle

21. werehumanrapture /20 20.07.2011 08:01 Psi+

так это ты тут усирался и спрашивал, возвращает ли она IOMode, а я тебе говорил, что она возвращает IOMode → IO Handle. Уже в пятый раз это говорю.
Открой ghci и повтори шаги, что я привёл. Посмотри, какой тип у openFile и у openTmpText.

22. rapturewerehuman /21 20.07.2011 08:05 unknown

Ладно, хуй с тобой, допустим, ты умнее меня. Твоя openTmpText действительно, как ты сказал, возвращает IOMode → IO Handle.
Внимание — вопрос — что же она тогда принимает? И что же тогда принимает функция записи, которую ты вызываешь непосредственно за ней?

23. werehumanrapture /22 20.07.2011 08:09 Psi+

openTmpText не возвращает (IOMode → IO Handle)! Не возвращает! НеНе возвращает! Не возвращает! Не возвращает! Не возвращает! возвращает!
openTmpText берёт на вход IOMode и возвращает IO Handle. IO Handle. IO Handle. IO Handle. IO Handle. IO Handle. IO Handle. IO Handle. IO Handle. IO Handle.

А вот openFile берёт на вход FilePath и возвращает (IOMode → IO Handle). openFile возвращает (IOMode → IO Handle). openFile возвращает (IOMode → IO Handle). openFile возвращает (IOMode → IO Handle). openFile возвращает (IOMode → IO Handle).

Ты вообще читал кусок на пастбине, что я тебе кинул? let openTmpText = openFile "/tmp/text.txt"
Что такое openFile знаешь? Какого она типа? Она типа FilePath → IOMode → IO Handle.
Видишь, ей передали значение типа FilePath? Что осталось? Осталось IOMode → IO Handle. Это IOMode → IO Handle было записано в переменную openTmpText. Видишь?

24. rapturewerehuman /23 20.07.2011 08:15 unknown

@rapture Допустим есть уравнение Путькфайлу + Мод = Хэндл, в результате вычисления которого возвращается Хэндл. Может ли в результате вычисления этого уравнения вернуться Хэндл И Мод?
@werehuman КОнечно! Чтобы вернуть Хэндл и Мод, надо ввести функцию f = Путькфайлу, тогда в уравнении f + Мод = Хэндл вернется хэндл и мод!

25. rapturerapture /24 20.07.2011 08:16 unknown

Еще одна такая хуйня с серьезным лицом, и я лично добьюсь у @arts чтобы тебя переименовали в верихуймана.

Do you really want to delete ?