Practice: can, know how, and up to it
What you will be able to do
Choose between ได้, เป็น and ไหว from the reason behind the sentence rather than from the English word, and keep ไม่ได้ on the right side of the verb.
All three words go at the end of the verb phrase, and the reason decides which one you want: ได้ for permission and circumstance, เป็น for a skill you once learned, ไหว for having the strength or the money. Move ไม่ได้ in front of the verb and it stops meaning "can't": in front of an action verb it reports that the thing did not happen, and in front of a state or a job it contradicts what the listener currently believes.
Which sentence tells your friend the truth?
You have driven for twenty years, but your licence is at home in Bangkok and there is a police check on the road tonight.
The block is outside you — no licence in your pocket, police on the road — and outside circumstance is exactly what ได้ covers, so ขับรถไม่ได้ (khàp rót mâi dâi). ไม่เป็น would deny that you ever learned, and you have driven for twenty years. ไม่ไหว claims you have not the strength or stamina left for it, which is not what is stopping you. And ผมไม่ได้ขับรถครับ puts ไม่ได้ in front of the verb, where it means "I didn't drive" — a report about the past rather than tonight's problem.
What is the speaker telling you?
ว่ายน้ำไม่เป็น
เป็น (bpen) is the word for a skill that was learned and is now part of you, so ไม่เป็น denies the training itself: he cannot swim and never could. Being too tired is ว่ายน้ำไม่ไหว (wâai-náam mâi wǎi), because that is about strength. A closed pool and a ban on going in are both outside circumstances, and both of those are ว่ายน้ำไม่ได้ (wâai-náam mâi dâi).
How do you tell your friend you cannot go on?
You are halfway up the hill in the afternoon heat and you have simply run out of energy.
ไหว (wǎi) is the word for strength and stamina, and running out of energy is precisely what it reports, so เดินต่อไม่ไหว (doen dtàw mâi wǎi). ไม่ได้ would say something outside you is stopping the walk, a closed path or an order from someone, and nothing is. ไม่เป็น would claim you never learned to walk. ไม่ทัน is for not keeping up or not arriving in time, which is a different failure again.
What has he told the waiter?
ผมไม่ได้กินกุ้ง
ไม่ได้ sits in front of กิน here, and in that position it denies the action rather than the ability: he did not eat it. "I can't eat shrimp" needs the same two syllables hung on the end instead, ผมกินกุ้งไม่ได้ (phǒm gin gûng mâi dâi). "I haven't eaten yet" is the block ยัง … ไม่ได้ + verb, as in ยังไม่ได้กินข้าว (yang mâi dâi gin khâao). An allergy is stated with แพ้ (pháe), as in ผมแพ้กุ้งครับ, and nothing in this sentence says why.
Which sentence does the job?
Shrimp makes you ill, and the kitchen needs to know before it starts cooking.
Say the whole action first and hang ไม่ได้ on the end: กินกุ้งไม่ได้ (gin gûng mâi dâi), meaning it does not agree with you. ผมไม่ได้กินกุ้งครับ is the same words moved in front of the verb and reports a past meal you did not have, so the kitchen learns nothing. ไม่เป็น would say you never took up eating shrimp, a habit rather than a reaction. ไม่ไหว says this particular plate has beaten you, which invites them to bring you less rather than none. Back it up with ผมแพ้กุ้งครับ.
Who is speaking?
ยังกินไม่ได้ครับ
ไม่ได้ comes after the verb, so this is about ability, and the block is external: ยังกินไม่ได้ครับ หมอห้าม is what you are told after a procedure. Push ไม่ได้ in front of the verb and you get ยังไม่ได้กินข้าว (yang mâi dâi gin khâao), "I haven't eaten yet", which is the unfinished-action reading and the other option here. Too full to manage more is กินไม่ไหว (gin mâi wǎi), and no appetite is กินไม่ลง (gin mâi long).
What do you answer?
You have studied Thai for a few months, you can already get through a short conversation, and a neighbour asks whether you speak it.
นิดหน่อย (nít-nàwy) is the hedge that attaches to ได้, so พูดได้นิดหน่อย is the honest answer after a few months. เป็น does not take นิดหน่อย at all, because it is closer to all or nothing: either you learned the thing or you did not, and its hedge is ไม่ค่อย. ไม่เป็น is the strong claim that you never learned the language. ไม่ได้ says nothing about whether you studied — it denies that you can produce Thai right now, and the short conversation you can already hold says otherwise.
Which hedge is the natural one?
You can put a meal together, but you would not call yourself a cook, and a Thai friend has asked.
ไม่ค่อย (mâi khâwy) is the hedge that goes with เป็น, so ทำอาหารไม่ค่อยเป็น is "I can't really cook": half a skill, honestly reported. นิดหน่อย belongs to ได้ and does not attach to เป็น. Both ไหว options move the sentence to strength instead of skill — ไม่ไหว says you have not the energy to cook, and ไม่ค่อยไหว that you are not really up to it — so neither says anything about what you learned.
How do you say so?
The jacket is lovely, nobody is stopping you buying it, and your money simply will not stretch that far.
ไหว covers money as well as muscle, because it is the word for what you have left in you, and that includes your wallet: จ่ายไม่ไหว (jàai mâi wǎi), or in bargaining สู้ราคาไม่ไหว (sûu raa-khaa mâi wǎi). ซื้อไม่ได้ would suggest something is blocking the purchase itself, which is the one thing the situation rules out. ไม่เป็น would claim you never learned how to pay. ไม่ทัน is about being too late, not too poor.
Which one fits?
The plate is small and the cooking is good, but you have just had bad news and cannot face eating.
ไม่ลง is for whatever will not go down, physically or emotionally, and a lost appetite is its home ground: กินไม่ลง (gin mâi long). กินไม่ไหว says the food beat you, which needs you to have been eating in the first place. กินไม่หมด is about the size of the portion, and the plate is small. กินไม่ได้ would mean you are forbidden it or it makes you ill, which is a claim about the food rather than about you.
Which sentence says so?
The woman at the government counter is explaining the next step at full speed and you have lost the thread.
ไม่ทัน is the failure to keep up, so ฟังไม่ทัน (fang mâi than) tells her she is going faster than you can follow, and it is the polite way to ask her to slow down. คิดไม่ออก is nothing coming out when you try to think of something. พูดไม่ถูก is not being able to put a thing into words, which is about your mouth rather than her speed. ทนไม่ไหว is having reached your limit with heat, noise or pain, and aimed at her it would say you cannot stand her.
You never learned. What comes back?
ขับรถเป็นไหมครับ
Thai answers a yes/no question by echoing the word it was built on, and this one was built on เป็น, so the answer is เป็นครับ or ไม่เป็นครับ. ไม่ใช่ denies a noun rather than a verb and belongs after a … ใช่ไหม question; using it here is the clearest sign of translating from English. ไม่ได้ answers a … ได้ไหม question. ไม่ไหว answers a … ไหวไหม question, and it would say you are too weak to drive today, which is not what she asked.
In which of these does it hand the work back to the person asking?
อะไรก็ได้ครับ
อะไรก็ได้ (à-rai gâw dâi) means any one of them will do, which is easy and polite when someone is offering you a choice between things that already exist. When the person asking is the one who has to cook, it gives them the decision as well as the work, and naming a dish is the kinder answer. Ordering from a menu, picking a café and picking a day all leave the other person nothing extra to carry — a day is เมื่อไหร่ก็ได้ (mêua-rài gâw dâi) territory. Keep it warm and put ครับ or ค่ะ on the end, because said flat it can land as "fine, whatever".
Said out loud at a counter, which sentence carries the same news?
ไม่สามารถใช้บัตรนี้ได้
สามารถ (sǎa-mâat) is the register of forms, signs, hospital notices and station announcements: recognise it, do not say it, because at a food stall it sounds like reading a memo aloud. The spoken version of the same news is ใช้ไม่ได้ครับ (chái mâi dâi khráp). ใช้ไม่เป็น would say the speaker never learned how to use a card. ใช้ไม่ไหว would say using it is beyond their strength. And ไม่ใช่บัตร denies that the object is a card at all, because ไม่ใช่ negates nouns while ไม่ได้ negates verbs.
Common mistake
Learners use ไม่ได้ for every "can't", and they put it where English puts it — in front of the verb — which turns "I can't eat shrimp" into "I didn't eat shrimp", the one sentence a kitchen must not hear from someone with an allergy.